(function (root, factory) { if (typeof module === 'object' && module.exports) module.exports = factory; else root.createInstallApp = factory; })(typeof self !== 'undefined' ? self : this, function createInstallApp(options) { const dismissedKey = 'stackchain.install.dismissed.v1'; let deferredPrompt = null; function hide() { options.card.hidden = true; } function showNativePrompt(event) { event.preventDefault(); deferredPrompt = event; options.guidance.hidden = true; options.installButton.hidden = false; options.card.hidden = false; } async function install() { if (!deferredPrompt) return; const prompt = deferredPrompt; deferredPrompt = null; options.installButton.disabled = true; await prompt.prompt(); const choice = await prompt.userChoice; if (choice.outcome === 'accepted') { hide(); options.status.textContent = 'Stackchain was added to your device.'; } else { hide(); options.installButton.disabled = false; options.status.textContent = 'Installation was not completed.'; } } function dismiss() { options.storage.setItem(dismissedKey, '1'); hide(); } function start() { if (options.isStandalone() || options.storage.getItem(dismissedKey) === '1') { hide(); return; } if (options.isIosSafari()) { options.installButton.hidden = true; options.guidance.hidden = false; options.card.hidden = false; } options.window.addEventListener('beforeinstallprompt', showNativePrompt); options.window.addEventListener('appinstalled', () => { deferredPrompt = null; hide(); }); options.installButton.addEventListener('click', install); options.dismissButton.addEventListener('click', dismiss); } return {start}; });