diff --git a/node_modules/dialog-polyfill/index.js b/node_modules/dialog-polyfill/index.js
index 3643014..8adc5ad 100644
--- a/node_modules/dialog-polyfill/index.js
+++ b/node_modules/dialog-polyfill/index.js
@@ -65,7 +65,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;
 }
@@ -148,7 +154,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);
@@ -156,6 +162,7 @@
 
 /**
  * @param {!Event} event
+ * @return {?Element}
  */
 function findFormSubmitter(event) {
   if (event.submitter) {
@@ -174,7 +181,7 @@
     submitter = root.activeElement;
   }
 
-  if (submitter.form !== form) {
+  if (!submitter || submitter.form !== form) {
     return null;
   }
   return submitter;
@@ -190,7 +197,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;
@@ -210,7 +217,8 @@
   }
   event.preventDefault();
 
-  if (submitter) {
+  if (value != null) {
+    // nb. we explicitly check against null/undefined
     dialog.close(value);
   } else {
     dialog.close();
@@ -748,7 +756,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
@@ -793,7 +801,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);
@@ -807,7 +815,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);
