diff --git a/node_modules/dialog-polyfill/dist/dialog-polyfill.esm.js b/node_modules/dialog-polyfill/dist/dialog-polyfill.esm.js
index 471f55e..da774bc 100644
--- a/node_modules/dialog-polyfill/dist/dialog-polyfill.esm.js
+++ b/node_modules/dialog-polyfill/dist/dialog-polyfill.esm.js
@@ -64,7 +64,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;
 }
@@ -147,7 +153,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);
@@ -155,6 +161,7 @@
 
 /**
  * @param {!Event} event
+ * @return {?Element}
  */
 function findFormSubmitter(event) {
   if (event.submitter) {
@@ -173,7 +180,7 @@
     submitter = root.activeElement;
   }
 
-  if (submitter.form !== form) {
+  if (!submitter || submitter.form !== form) {
     return null;
   }
   return submitter;
@@ -189,7 +196,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;
@@ -209,7 +216,8 @@
   }
   event.preventDefault();
 
-  if (submitter) {
+  if (value != null) {
+    // nb. we explicitly check against null/undefined
     dialog.close(value);
   } else {
     dialog.close();
@@ -745,7 +753,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
@@ -790,7 +798,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);
@@ -804,7 +812,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);
