{"ast":null,"code":"import { canUseDOM } from 'fbjs/lib/ExecutionEnvironment';\nimport createEventHandle from \"../createEventHandle\";\n\nvar supportsPointerEvent = function supportsPointerEvent() {\n  return !!(typeof window !== 'undefined' && window.PointerEvent != null);\n};\n\nvar activeModality = 'keyboard';\nvar modality = 'keyboard';\nvar previousModality;\nvar previousActiveModality;\nvar isEmulatingMouseEvents = false;\nvar listeners = new Set();\nvar KEYBOARD = 'keyboard';\nvar MOUSE = 'mouse';\nvar TOUCH = 'touch';\nvar BLUR = 'blur';\nvar CONTEXTMENU = 'contextmenu';\nvar FOCUS = 'focus';\nvar KEYDOWN = 'keydown';\nvar MOUSEDOWN = 'mousedown';\nvar MOUSEMOVE = 'mousemove';\nvar MOUSEUP = 'mouseup';\nvar POINTERDOWN = 'pointerdown';\nvar POINTERMOVE = 'pointermove';\nvar SCROLL = 'scroll';\nvar SELECTIONCHANGE = 'selectionchange';\nvar TOUCHCANCEL = 'touchcancel';\nvar TOUCHMOVE = 'touchmove';\nvar TOUCHSTART = 'touchstart';\nvar VISIBILITYCHANGE = 'visibilitychange';\nvar bubbleOptions = {\n  passive: true\n};\nvar captureOptions = {\n  capture: true,\n  passive: true\n};\nvar addBlurListener = createEventHandle(BLUR, bubbleOptions);\nvar addFocusListener = createEventHandle(FOCUS, bubbleOptions);\nvar addVisibilityChangeListener = createEventHandle(VISIBILITYCHANGE, captureOptions);\nvar addKeyDownListener = createEventHandle(KEYDOWN, captureOptions);\nvar addPointerDownListener = createEventHandle(POINTERDOWN, captureOptions);\nvar addPointerMoveListener = createEventHandle(POINTERMOVE, captureOptions);\nvar addContextMenuListener = createEventHandle(CONTEXTMENU, captureOptions);\nvar addMouseDownListener = createEventHandle(MOUSEDOWN, captureOptions);\nvar addMouseMoveListener = createEventHandle(MOUSEMOVE, captureOptions);\nvar addMouseUpListener = createEventHandle(MOUSEUP, captureOptions);\nvar addScrollListener = createEventHandle(SCROLL, captureOptions);\nvar addSelectiomChangeListener = createEventHandle(SELECTIONCHANGE, captureOptions);\nvar addTouchCancelListener = createEventHandle(TOUCHCANCEL, captureOptions);\nvar addTouchMoveListener = createEventHandle(TOUCHMOVE, captureOptions);\nvar addTouchStartListener = createEventHandle(TOUCHSTART, captureOptions);\n\nfunction restoreModality() {\n  if (previousModality != null || previousActiveModality != null) {\n    if (previousModality != null) {\n      modality = previousModality;\n      previousModality = null;\n    }\n\n    if (previousActiveModality != null) {\n      activeModality = previousActiveModality;\n      previousActiveModality = null;\n    }\n\n    callListeners();\n  }\n}\n\nfunction onBlurWindow() {\n  previousModality = modality;\n  previousActiveModality = activeModality;\n  activeModality = KEYBOARD;\n  modality = KEYBOARD;\n  callListeners();\n  isEmulatingMouseEvents = false;\n}\n\nfunction onFocusWindow() {\n  restoreModality();\n}\n\nfunction onKeyDown(event) {\n  if (event.metaKey || event.altKey || event.ctrlKey) {\n    return;\n  }\n\n  if (modality !== KEYBOARD) {\n    modality = KEYBOARD;\n    activeModality = KEYBOARD;\n    callListeners();\n  }\n}\n\nfunction onVisibilityChange() {\n  if (document.visibilityState !== 'hidden') {\n    restoreModality();\n  }\n}\n\nfunction onPointerish(event) {\n  var eventType = event.type;\n\n  if (supportsPointerEvent()) {\n    if (eventType === POINTERDOWN) {\n      if (activeModality !== event.pointerType) {\n        modality = event.pointerType;\n        activeModality = event.pointerType;\n        callListeners();\n      }\n\n      return;\n    }\n\n    if (eventType === POINTERMOVE) {\n      if (modality !== event.pointerType) {\n        modality = event.pointerType;\n        callListeners();\n      }\n\n      return;\n    }\n  } else {\n      if (!isEmulatingMouseEvents) {\n        if (eventType === MOUSEDOWN) {\n          if (activeModality !== MOUSE) {\n            modality = MOUSE;\n            activeModality = MOUSE;\n            callListeners();\n          }\n        }\n\n        if (eventType === MOUSEMOVE) {\n          if (modality !== MOUSE) {\n            modality = MOUSE;\n            callListeners();\n          }\n        }\n      }\n\n      if (eventType === TOUCHSTART) {\n        isEmulatingMouseEvents = true;\n\n        if (event.touches && event.touches.length > 1) {\n          isEmulatingMouseEvents = false;\n        }\n\n        if (activeModality !== TOUCH) {\n          modality = TOUCH;\n          activeModality = TOUCH;\n          callListeners();\n        }\n\n        return;\n      }\n\n      if (eventType === CONTEXTMENU || eventType === MOUSEUP || eventType === SELECTIONCHANGE || eventType === SCROLL || eventType === TOUCHCANCEL || eventType === TOUCHMOVE) {\n        isEmulatingMouseEvents = false;\n      }\n    }\n}\n\nif (canUseDOM) {\n  addBlurListener(window, onBlurWindow);\n  addFocusListener(window, onFocusWindow);\n  addKeyDownListener(document, onKeyDown);\n  addPointerDownListener(document, onPointerish);\n  addPointerMoveListener(document, onPointerish);\n  addVisibilityChangeListener(document, onVisibilityChange);\n  addContextMenuListener(document, onPointerish);\n  addMouseDownListener(document, onPointerish);\n  addMouseMoveListener(document, onPointerish);\n  addMouseUpListener(document, onPointerish);\n  addTouchCancelListener(document, onPointerish);\n  addTouchMoveListener(document, onPointerish);\n  addTouchStartListener(document, onPointerish);\n  addSelectiomChangeListener(document, onPointerish);\n  addScrollListener(document, onPointerish);\n}\n\nfunction callListeners() {\n  var value = {\n    activeModality: activeModality,\n    modality: modality\n  };\n  listeners.forEach(function (listener) {\n    listener(value);\n  });\n}\n\nexport function getActiveModality() {\n  return activeModality;\n}\nexport function getModality() {\n  return modality;\n}\nexport function addModalityListener(listener) {\n  listeners.add(listener);\n  return function () {\n    listeners.delete(listener);\n  };\n}\nexport function testOnly_resetActiveModality() {\n  isEmulatingMouseEvents = false;\n  activeModality = KEYBOARD;\n  modality = KEYBOARD;\n}","map":{"version":3,"sources":["/Users/rohitsingh/Documents/projects/new-nativebase-setup/NativeBase/example/node_modules/react-native-web/dist/modules/modality/index.js"],"names":["canUseDOM","createEventHandle","supportsPointerEvent","window","PointerEvent","activeModality","modality","previousModality","previousActiveModality","isEmulatingMouseEvents","listeners","Set","KEYBOARD","MOUSE","TOUCH","BLUR","CONTEXTMENU","FOCUS","KEYDOWN","MOUSEDOWN","MOUSEMOVE","MOUSEUP","POINTERDOWN","POINTERMOVE","SCROLL","SELECTIONCHANGE","TOUCHCANCEL","TOUCHMOVE","TOUCHSTART","VISIBILITYCHANGE","bubbleOptions","passive","captureOptions","capture","addBlurListener","addFocusListener","addVisibilityChangeListener","addKeyDownListener","addPointerDownListener","addPointerMoveListener","addContextMenuListener","addMouseDownListener","addMouseMoveListener","addMouseUpListener","addScrollListener","addSelectiomChangeListener","addTouchCancelListener","addTouchMoveListener","addTouchStartListener","restoreModality","callListeners","onBlurWindow","onFocusWindow","onKeyDown","event","metaKey","altKey","ctrlKey","onVisibilityChange","document","visibilityState","onPointerish","eventType","type","pointerType","touches","length","value","forEach","listener","getActiveModality","getModality","addModalityListener","add","delete","testOnly_resetActiveModality"],"mappings":"AAQA,SAASA,SAAT,QAA0B,+BAA1B;AACA,OAAOC,iBAAP;;AAEA,IAAIC,oBAAoB,GAAG,SAASA,oBAAT,GAAgC;AACzD,SAAO,CAAC,EAAE,OAAOC,MAAP,KAAkB,WAAlB,IAAiCA,MAAM,CAACC,YAAP,IAAuB,IAA1D,CAAR;AACD,CAFD;;AAIA,IAAIC,cAAc,GAAG,UAArB;AACA,IAAIC,QAAQ,GAAG,UAAf;AACA,IAAIC,gBAAJ;AACA,IAAIC,sBAAJ;AACA,IAAIC,sBAAsB,GAAG,KAA7B;AACA,IAAIC,SAAS,GAAG,IAAIC,GAAJ,EAAhB;AACA,IAAIC,QAAQ,GAAG,UAAf;AACA,IAAIC,KAAK,GAAG,OAAZ;AACA,IAAIC,KAAK,GAAG,OAAZ;AACA,IAAIC,IAAI,GAAG,MAAX;AACA,IAAIC,WAAW,GAAG,aAAlB;AACA,IAAIC,KAAK,GAAG,OAAZ;AACA,IAAIC,OAAO,GAAG,SAAd;AACA,IAAIC,SAAS,GAAG,WAAhB;AACA,IAAIC,SAAS,GAAG,WAAhB;AACA,IAAIC,OAAO,GAAG,SAAd;AACA,IAAIC,WAAW,GAAG,aAAlB;AACA,IAAIC,WAAW,GAAG,aAAlB;AACA,IAAIC,MAAM,GAAG,QAAb;AACA,IAAIC,eAAe,GAAG,iBAAtB;AACA,IAAIC,WAAW,GAAG,aAAlB;AACA,IAAIC,SAAS,GAAG,WAAhB;AACA,IAAIC,UAAU,GAAG,YAAjB;AACA,IAAIC,gBAAgB,GAAG,kBAAvB;AACA,IAAIC,aAAa,GAAG;AAClBC,EAAAA,OAAO,EAAE;AADS,CAApB;AAGA,IAAIC,cAAc,GAAG;AACnBC,EAAAA,OAAO,EAAE,IADU;AAEnBF,EAAAA,OAAO,EAAE;AAFU,CAArB;AAKA,IAAIG,eAAe,GAAGjC,iBAAiB,CAACc,IAAD,EAAOe,aAAP,CAAvC;AACA,IAAIK,gBAAgB,GAAGlC,iBAAiB,CAACgB,KAAD,EAAQa,aAAR,CAAxC;AAGA,IAAIM,2BAA2B,GAAGnC,iBAAiB,CAAC4B,gBAAD,EAAmBG,cAAnB,CAAnD;AACA,IAAIK,kBAAkB,GAAGpC,iBAAiB,CAACiB,OAAD,EAAUc,cAAV,CAA1C;AACA,IAAIM,sBAAsB,GAAGrC,iBAAiB,CAACqB,WAAD,EAAcU,cAAd,CAA9C;AACA,IAAIO,sBAAsB,GAAGtC,iBAAiB,CAACsB,WAAD,EAAcS,cAAd,CAA9C;AAEA,IAAIQ,sBAAsB,GAAGvC,iBAAiB,CAACe,WAAD,EAAcgB,cAAd,CAA9C;AACA,IAAIS,oBAAoB,GAAGxC,iBAAiB,CAACkB,SAAD,EAAYa,cAAZ,CAA5C;AACA,IAAIU,oBAAoB,GAAGzC,iBAAiB,CAACmB,SAAD,EAAYY,cAAZ,CAA5C;AACA,IAAIW,kBAAkB,GAAG1C,iBAAiB,CAACoB,OAAD,EAAUW,cAAV,CAA1C;AACA,IAAIY,iBAAiB,GAAG3C,iBAAiB,CAACuB,MAAD,EAASQ,cAAT,CAAzC;AACA,IAAIa,0BAA0B,GAAG5C,iBAAiB,CAACwB,eAAD,EAAkBO,cAAlB,CAAlD;AACA,IAAIc,sBAAsB,GAAG7C,iBAAiB,CAACyB,WAAD,EAAcM,cAAd,CAA9C;AACA,IAAIe,oBAAoB,GAAG9C,iBAAiB,CAAC0B,SAAD,EAAYK,cAAZ,CAA5C;AACA,IAAIgB,qBAAqB,GAAG/C,iBAAiB,CAAC2B,UAAD,EAAaI,cAAb,CAA7C;;AAEA,SAASiB,eAAT,GAA2B;AACzB,MAAI1C,gBAAgB,IAAI,IAApB,IAA4BC,sBAAsB,IAAI,IAA1D,EAAgE;AAC9D,QAAID,gBAAgB,IAAI,IAAxB,EAA8B;AAC5BD,MAAAA,QAAQ,GAAGC,gBAAX;AACAA,MAAAA,gBAAgB,GAAG,IAAnB;AACD;;AAED,QAAIC,sBAAsB,IAAI,IAA9B,EAAoC;AAClCH,MAAAA,cAAc,GAAGG,sBAAjB;AACAA,MAAAA,sBAAsB,GAAG,IAAzB;AACD;;AAED0C,IAAAA,aAAa;AACd;AACF;;AAED,SAASC,YAAT,GAAwB;AACtB5C,EAAAA,gBAAgB,GAAGD,QAAnB;AACAE,EAAAA,sBAAsB,GAAGH,cAAzB;AACAA,EAAAA,cAAc,GAAGO,QAAjB;AACAN,EAAAA,QAAQ,GAAGM,QAAX;AACAsC,EAAAA,aAAa;AAEbzC,EAAAA,sBAAsB,GAAG,KAAzB;AACD;;AAED,SAAS2C,aAAT,GAAyB;AACvBH,EAAAA,eAAe;AAChB;;AAED,SAASI,SAAT,CAAmBC,KAAnB,EAA0B;AACxB,MAAIA,KAAK,CAACC,OAAN,IAAiBD,KAAK,CAACE,MAAvB,IAAiCF,KAAK,CAACG,OAA3C,EAAoD;AAClD;AACD;;AAED,MAAInD,QAAQ,KAAKM,QAAjB,EAA2B;AACzBN,IAAAA,QAAQ,GAAGM,QAAX;AACAP,IAAAA,cAAc,GAAGO,QAAjB;AACAsC,IAAAA,aAAa;AACd;AACF;;AAED,SAASQ,kBAAT,GAA8B;AAC5B,MAAIC,QAAQ,CAACC,eAAT,KAA6B,QAAjC,EAA2C;AACzCX,IAAAA,eAAe;AAChB;AACF;;AAED,SAASY,YAAT,CAAsBP,KAAtB,EAA6B;AAC3B,MAAIQ,SAAS,GAAGR,KAAK,CAACS,IAAtB;;AAEA,MAAI7D,oBAAoB,EAAxB,EAA4B;AAC1B,QAAI4D,SAAS,KAAKxC,WAAlB,EAA+B;AAC7B,UAAIjB,cAAc,KAAKiD,KAAK,CAACU,WAA7B,EAA0C;AACxC1D,QAAAA,QAAQ,GAAGgD,KAAK,CAACU,WAAjB;AACA3D,QAAAA,cAAc,GAAGiD,KAAK,CAACU,WAAvB;AACAd,QAAAA,aAAa;AACd;;AAED;AACD;;AAED,QAAIY,SAAS,KAAKvC,WAAlB,EAA+B;AAC7B,UAAIjB,QAAQ,KAAKgD,KAAK,CAACU,WAAvB,EAAoC;AAClC1D,QAAAA,QAAQ,GAAGgD,KAAK,CAACU,WAAjB;AACAd,QAAAA,aAAa;AACd;;AAED;AACD;AACF,GAnBD,MAoBK;AACD,UAAI,CAACzC,sBAAL,EAA6B;AAC3B,YAAIqD,SAAS,KAAK3C,SAAlB,EAA6B;AAC3B,cAAId,cAAc,KAAKQ,KAAvB,EAA8B;AAC5BP,YAAAA,QAAQ,GAAGO,KAAX;AACAR,YAAAA,cAAc,GAAGQ,KAAjB;AACAqC,YAAAA,aAAa;AACd;AACF;;AAED,YAAIY,SAAS,KAAK1C,SAAlB,EAA6B;AAC3B,cAAId,QAAQ,KAAKO,KAAjB,EAAwB;AACtBP,YAAAA,QAAQ,GAAGO,KAAX;AACAqC,YAAAA,aAAa;AACd;AACF;AACF;;AAGD,UAAIY,SAAS,KAAKlC,UAAlB,EAA8B;AAC5BnB,QAAAA,sBAAsB,GAAG,IAAzB;;AAEA,YAAI6C,KAAK,CAACW,OAAN,IAAiBX,KAAK,CAACW,OAAN,CAAcC,MAAd,GAAuB,CAA5C,EAA+C;AAC7CzD,UAAAA,sBAAsB,GAAG,KAAzB;AACD;;AAED,YAAIJ,cAAc,KAAKS,KAAvB,EAA8B;AAC5BR,UAAAA,QAAQ,GAAGQ,KAAX;AACAT,UAAAA,cAAc,GAAGS,KAAjB;AACAoC,UAAAA,aAAa;AACd;;AAED;AACD;;AAID,UAAIY,SAAS,KAAK9C,WAAd,IAA6B8C,SAAS,KAAKzC,OAA3C,IAAsDyC,SAAS,KAAKrC,eAApE,IAAuFqC,SAAS,KAAKtC,MAArG,IAA+GsC,SAAS,KAAKpC,WAA7H,IAA4IoC,SAAS,KAAKnC,SAA9J,EAAyK;AACvKlB,QAAAA,sBAAsB,GAAG,KAAzB;AACD;AACF;AACJ;;AAED,IAAIT,SAAJ,EAAe;AACbkC,EAAAA,eAAe,CAAC/B,MAAD,EAASgD,YAAT,CAAf;AACAhB,EAAAA,gBAAgB,CAAChC,MAAD,EAASiD,aAAT,CAAhB;AACAf,EAAAA,kBAAkB,CAACsB,QAAD,EAAWN,SAAX,CAAlB;AACAf,EAAAA,sBAAsB,CAACqB,QAAD,EAAWE,YAAX,CAAtB;AACAtB,EAAAA,sBAAsB,CAACoB,QAAD,EAAWE,YAAX,CAAtB;AACAzB,EAAAA,2BAA2B,CAACuB,QAAD,EAAWD,kBAAX,CAA3B;AAEAlB,EAAAA,sBAAsB,CAACmB,QAAD,EAAWE,YAAX,CAAtB;AACApB,EAAAA,oBAAoB,CAACkB,QAAD,EAAWE,YAAX,CAApB;AACAnB,EAAAA,oBAAoB,CAACiB,QAAD,EAAWE,YAAX,CAApB;AACAlB,EAAAA,kBAAkB,CAACgB,QAAD,EAAWE,YAAX,CAAlB;AACAf,EAAAA,sBAAsB,CAACa,QAAD,EAAWE,YAAX,CAAtB;AACAd,EAAAA,oBAAoB,CAACY,QAAD,EAAWE,YAAX,CAApB;AACAb,EAAAA,qBAAqB,CAACW,QAAD,EAAWE,YAAX,CAArB;AACAhB,EAAAA,0BAA0B,CAACc,QAAD,EAAWE,YAAX,CAA1B;AACAjB,EAAAA,iBAAiB,CAACe,QAAD,EAAWE,YAAX,CAAjB;AACD;;AAED,SAASX,aAAT,GAAyB;AACvB,MAAIiB,KAAK,GAAG;AACV9D,IAAAA,cAAc,EAAEA,cADN;AAEVC,IAAAA,QAAQ,EAAEA;AAFA,GAAZ;AAIAI,EAAAA,SAAS,CAAC0D,OAAV,CAAkB,UAAUC,QAAV,EAAoB;AACpCA,IAAAA,QAAQ,CAACF,KAAD,CAAR;AACD,GAFD;AAGD;;AAED,OAAO,SAASG,iBAAT,GAA6B;AAClC,SAAOjE,cAAP;AACD;AACD,OAAO,SAASkE,WAAT,GAAuB;AAC5B,SAAOjE,QAAP;AACD;AACD,OAAO,SAASkE,mBAAT,CAA6BH,QAA7B,EAAuC;AAC5C3D,EAAAA,SAAS,CAAC+D,GAAV,CAAcJ,QAAd;AACA,SAAO,YAAY;AACjB3D,IAAAA,SAAS,CAACgE,MAAV,CAAiBL,QAAjB;AACD,GAFD;AAGD;AACD,OAAO,SAASM,4BAAT,GAAwC;AAC7ClE,EAAAA,sBAAsB,GAAG,KAAzB;AACAJ,EAAAA,cAAc,GAAGO,QAAjB;AACAN,EAAAA,QAAQ,GAAGM,QAAX;AACD","sourcesContent":["/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\nimport { canUseDOM } from 'fbjs/lib/ExecutionEnvironment';\nimport createEventHandle from '../createEventHandle';\n\nvar supportsPointerEvent = function supportsPointerEvent() {\n  return !!(typeof window !== 'undefined' && window.PointerEvent != null);\n};\n\nvar activeModality = 'keyboard';\nvar modality = 'keyboard';\nvar previousModality;\nvar previousActiveModality;\nvar isEmulatingMouseEvents = false;\nvar listeners = new Set();\nvar KEYBOARD = 'keyboard';\nvar MOUSE = 'mouse';\nvar TOUCH = 'touch';\nvar BLUR = 'blur';\nvar CONTEXTMENU = 'contextmenu';\nvar FOCUS = 'focus';\nvar KEYDOWN = 'keydown';\nvar MOUSEDOWN = 'mousedown';\nvar MOUSEMOVE = 'mousemove';\nvar MOUSEUP = 'mouseup';\nvar POINTERDOWN = 'pointerdown';\nvar POINTERMOVE = 'pointermove';\nvar SCROLL = 'scroll';\nvar SELECTIONCHANGE = 'selectionchange';\nvar TOUCHCANCEL = 'touchcancel';\nvar TOUCHMOVE = 'touchmove';\nvar TOUCHSTART = 'touchstart';\nvar VISIBILITYCHANGE = 'visibilitychange';\nvar bubbleOptions = {\n  passive: true\n};\nvar captureOptions = {\n  capture: true,\n  passive: true\n}; // Window events\n\nvar addBlurListener = createEventHandle(BLUR, bubbleOptions);\nvar addFocusListener = createEventHandle(FOCUS, bubbleOptions); // Must be capture phase because 'stopPropagation' might prevent these\n// events bubbling to the document.\n\nvar addVisibilityChangeListener = createEventHandle(VISIBILITYCHANGE, captureOptions);\nvar addKeyDownListener = createEventHandle(KEYDOWN, captureOptions);\nvar addPointerDownListener = createEventHandle(POINTERDOWN, captureOptions);\nvar addPointerMoveListener = createEventHandle(POINTERMOVE, captureOptions); // Fallback events\n\nvar addContextMenuListener = createEventHandle(CONTEXTMENU, captureOptions);\nvar addMouseDownListener = createEventHandle(MOUSEDOWN, captureOptions);\nvar addMouseMoveListener = createEventHandle(MOUSEMOVE, captureOptions);\nvar addMouseUpListener = createEventHandle(MOUSEUP, captureOptions);\nvar addScrollListener = createEventHandle(SCROLL, captureOptions);\nvar addSelectiomChangeListener = createEventHandle(SELECTIONCHANGE, captureOptions);\nvar addTouchCancelListener = createEventHandle(TOUCHCANCEL, captureOptions);\nvar addTouchMoveListener = createEventHandle(TOUCHMOVE, captureOptions);\nvar addTouchStartListener = createEventHandle(TOUCHSTART, captureOptions);\n\nfunction restoreModality() {\n  if (previousModality != null || previousActiveModality != null) {\n    if (previousModality != null) {\n      modality = previousModality;\n      previousModality = null;\n    }\n\n    if (previousActiveModality != null) {\n      activeModality = previousActiveModality;\n      previousActiveModality = null;\n    }\n\n    callListeners();\n  }\n}\n\nfunction onBlurWindow() {\n  previousModality = modality;\n  previousActiveModality = activeModality;\n  activeModality = KEYBOARD;\n  modality = KEYBOARD;\n  callListeners(); // for fallback events\n\n  isEmulatingMouseEvents = false;\n}\n\nfunction onFocusWindow() {\n  restoreModality();\n}\n\nfunction onKeyDown(event) {\n  if (event.metaKey || event.altKey || event.ctrlKey) {\n    return;\n  }\n\n  if (modality !== KEYBOARD) {\n    modality = KEYBOARD;\n    activeModality = KEYBOARD;\n    callListeners();\n  }\n}\n\nfunction onVisibilityChange() {\n  if (document.visibilityState !== 'hidden') {\n    restoreModality();\n  }\n}\n\nfunction onPointerish(event) {\n  var eventType = event.type;\n\n  if (supportsPointerEvent()) {\n    if (eventType === POINTERDOWN) {\n      if (activeModality !== event.pointerType) {\n        modality = event.pointerType;\n        activeModality = event.pointerType;\n        callListeners();\n      }\n\n      return;\n    }\n\n    if (eventType === POINTERMOVE) {\n      if (modality !== event.pointerType) {\n        modality = event.pointerType;\n        callListeners();\n      }\n\n      return;\n    }\n  } // Fallback for non-PointerEvent environment\n  else {\n      if (!isEmulatingMouseEvents) {\n        if (eventType === MOUSEDOWN) {\n          if (activeModality !== MOUSE) {\n            modality = MOUSE;\n            activeModality = MOUSE;\n            callListeners();\n          }\n        }\n\n        if (eventType === MOUSEMOVE) {\n          if (modality !== MOUSE) {\n            modality = MOUSE;\n            callListeners();\n          }\n        }\n      } // Flag when browser may produce emulated events\n\n\n      if (eventType === TOUCHSTART) {\n        isEmulatingMouseEvents = true;\n\n        if (event.touches && event.touches.length > 1) {\n          isEmulatingMouseEvents = false;\n        }\n\n        if (activeModality !== TOUCH) {\n          modality = TOUCH;\n          activeModality = TOUCH;\n          callListeners();\n        }\n\n        return;\n      } // Remove flag after emulated events are finished or cancelled, and if an\n      // event occurs that cuts short a touch event sequence.\n\n\n      if (eventType === CONTEXTMENU || eventType === MOUSEUP || eventType === SELECTIONCHANGE || eventType === SCROLL || eventType === TOUCHCANCEL || eventType === TOUCHMOVE) {\n        isEmulatingMouseEvents = false;\n      }\n    }\n}\n\nif (canUseDOM) {\n  addBlurListener(window, onBlurWindow);\n  addFocusListener(window, onFocusWindow);\n  addKeyDownListener(document, onKeyDown);\n  addPointerDownListener(document, onPointerish);\n  addPointerMoveListener(document, onPointerish);\n  addVisibilityChangeListener(document, onVisibilityChange); // fallbacks\n\n  addContextMenuListener(document, onPointerish);\n  addMouseDownListener(document, onPointerish);\n  addMouseMoveListener(document, onPointerish);\n  addMouseUpListener(document, onPointerish);\n  addTouchCancelListener(document, onPointerish);\n  addTouchMoveListener(document, onPointerish);\n  addTouchStartListener(document, onPointerish);\n  addSelectiomChangeListener(document, onPointerish);\n  addScrollListener(document, onPointerish);\n}\n\nfunction callListeners() {\n  var value = {\n    activeModality: activeModality,\n    modality: modality\n  };\n  listeners.forEach(function (listener) {\n    listener(value);\n  });\n}\n\nexport function getActiveModality() {\n  return activeModality;\n}\nexport function getModality() {\n  return modality;\n}\nexport function addModalityListener(listener) {\n  listeners.add(listener);\n  return function () {\n    listeners.delete(listener);\n  };\n}\nexport function testOnly_resetActiveModality() {\n  isEmulatingMouseEvents = false;\n  activeModality = KEYBOARD;\n  modality = KEYBOARD;\n}"]},"metadata":{},"sourceType":"module"}