diff --git a/node_modules/dialog-polyfill/dist/dialog-polyfill.js b/node_modules/dialog-polyfill/dist/dialog-polyfill.js
index bd60a70..aee7d96 100644
--- a/node_modules/dialog-polyfill/dist/dialog-polyfill.js
+++ b/node_modules/dialog-polyfill/dist/dialog-polyfill.js
@@ -70,7 +70,13 @@
       if (el.localName === 'dialog') {
         return /** @type {HTMLDialogElement} */ (el);
       }
-      el = el.parentElement;
+      if (el.parentElement) {
+        el = el.parentElement;
+      } else if (el.parentNode) {
+        el = el.parentNode.host;
+      } else {
+        el = null;
+      }
     }
     return null;
   }
@@ -153,7 +159,7 @@
   /**
    * Determines if an element is attached to the DOM.
    * @param {Element} element to check
-   * @return {Boolean} whether the element is in DOM
+   * @return {boolean} whether the element is in DOM
    */
   function isConnected(element) {
     return element.isConnected || document.body.contains(element);
@@ -161,6 +167,7 @@
 
   /**
    * @param {!Event} event
+   * @return {?Element}
    */
   function findFormSubmitter(event) {
     if (event.submitter) {
@@ -179,7 +186,7 @@
       submitter = root.activeElement;
     }
 
-    if (submitter.form !== form) {
+    if (!submitter || submitter.form !== form) {
       return null;
     }
     return submitter;
@@ -195,7 +202,7 @@
     var form = /** @type {!HTMLFormElement} */ (event.target);
 
     // We'd have a value if we clicked on an imagemap.
-    var value = dialogPolyfill.useValue;
+    var value = dialogPolyfill.imagemapUseValue;
     var submitter = findFormSubmitter(event);
     if (value === null && submitter) {
       value = submitter.value;
@@ -215,7 +222,8 @@
     }
     event.preventDefault();
 
-    if (submitter) {
+    if (value != null) {
+      // nb. we explicitly check against null/undefined
       dialog.close(value);
     } else {
       dialog.close();
@@ -751,7 +759,7 @@
 
   dialogPolyfill.dm = new dialogPolyfill.DialogManager();
   dialogPolyfill.formSubmitter = null;
-  dialogPolyfill.useValue = null;
+  dialogPolyfill.imagemapUseValue = null;
 
   /**
    * Installs global handlers, such as click listers and native method overrides. These are needed
@@ -796,7 +804,7 @@
      */
     document.addEventListener('click', function(ev) {
       dialogPolyfill.formSubmitter = null;
-      dialogPolyfill.useValue = null;
+      dialogPolyfill.imagemapUseValue = null;
       if (ev.defaultPrevented) { return; }  // e.g. a submit which prevents default submission
 
       var target = /** @type {Element} */ (ev.target);
@@ -810,7 +818,7 @@
       if (!valid) {
         if (!(target.localName === 'input' && target.type === 'image')) { return; }
         // this is a <input type="image">, which can submit forms
-        dialogPolyfill.useValue = ev.offsetX + ',' + ev.offsetY;
+        dialogPolyfill.imagemapUseValue = ev.offsetX + ',' + ev.offsetY;
       }
 
       var dialog = findNearestDialog(target);
