(function (root, factory) { "use strict"; const api = factory(); if (typeof module === "object" && module.exports) { module.exports = api; } if (root && root.document) { root.AcademicArcadeReferralBanner = api; api.bootstrap({ globalObject: root }); } })(typeof globalThis !== "undefined" ? globalThis : this, function () { "use strict"; const SUCCESSFUL_CAPTURE_STATUSES = new Set(["STORED", "UNCHANGED"]); const SAFE_SYNC_STATUSES = new Set([ "CAPTURED", "UPDATED", "UNCHANGED", "SYNCED", "UNAUTHENTICATED" ]); function statusOf(result) { return String(result && result.status || "").trim().toUpperCase(); } function shouldShow(client) { if (!client || !SUCCESSFUL_CAPTURE_STATUSES.has(statusOf(client.lastCaptureResult))) { return false; } const syncStatus = statusOf(client.lastSyncResult); return !syncStatus || SAFE_SYNC_STATUSES.has(syncStatus); } function bootstrap(options) { const settings = options || {}; const runtime = settings.globalObject || (typeof window !== "undefined" ? window : null); const documentObject = settings.document || (runtime && runtime.document); if (!runtime || !documentObject) return null; const banner = documentObject.getElementById("referral-success-banner"); const dismissButton = documentObject.getElementById("referral-banner-dismiss"); if (!banner || !dismissButton) return null; let dismissed = false; function render(client) { if (dismissed || !shouldShow(client)) return false; banner.hidden = false; return true; } dismissButton.addEventListener("click", function () { dismissed = true; banner.hidden = true; }); runtime.addEventListener("aa:referral-ready", function () { render(runtime.aaReferralAttribution); }, { once: true }); if (runtime.AA_REFERRAL_READY) { Promise.resolve(runtime.AA_REFERRAL_READY) .then(render) .catch(function () {}); } else if (runtime.aaReferralAttribution) { Promise.resolve(runtime.aaReferralAttribution.ready) .then(function () { render(runtime.aaReferralAttribution); }) .catch(function () {}); } return { render: render }; } return { shouldShow: shouldShow, bootstrap: bootstrap }; });