@auxilium/datalynk-client 1.2.92 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/api.d.ts CHANGED
@@ -54,6 +54,15 @@ export type ApiOptions = {
54
54
  /** TURN server password */
55
55
  password?: string;
56
56
  };
57
+ /** Progressive Web App settings */
58
+ pwaSettings?: {
59
+ /** How long to wait before showing install prompt (seconds). Default is 30 seconds */
60
+ timeout?: number;
61
+ /** Days until dismissed prompt can show again. If set to 0 it will trigger every refresh. (Default is 7 days) */
62
+ dismissExpiry?: number;
63
+ /** Show PWA install link on login screen. Default is False */
64
+ loginLink?: boolean;
65
+ };
57
66
  };
58
67
  /**
59
68
  * Possible options for API calls
package/dist/api.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1719,6 +1719,8 @@ async function getTheme(spoke, scope) {
1719
1719
  color: "#c83232",
1720
1720
  glow: "#c83232",
1721
1721
  logo: `https://${spoke}.auxiliumgroup.com/static/js/auxilium/dijits/templates/login/${spoke}/logo.png`,
1722
+ logoPosition: "left",
1723
+ hideLogo: false,
1722
1724
  hideApps: false,
1723
1725
  persist: true,
1724
1726
  title: spoke.toUpperCase(),
@@ -1768,19 +1770,43 @@ const _LoginPrompt = class _LoginPrompt {
1768
1770
  this.username = document.querySelector('#datalynk-login-form input[name="username"]');
1769
1771
  if (this.options.persist === false) this.persist.parentElement.remove();
1770
1772
  this.form.onsubmit = (event) => this.login(event);
1773
+ const pwaLink = document.querySelector("#pwa-install-link");
1774
+ if (pwaLink) {
1775
+ pwaLink.addEventListener("click", async (e) => {
1776
+ var _a;
1777
+ e.preventDefault();
1778
+ if ((_a = this.api.pwa) == null ? void 0 : _a.deferredPrompt) {
1779
+ this.api.pwa.deferredPrompt.prompt();
1780
+ const choice = await this.api.pwa.deferredPrompt.userChoice;
1781
+ if (choice.outcome === "accepted") {
1782
+ console.log("PWA installed via login link");
1783
+ }
1784
+ this.api.pwa.deferredPrompt = null;
1785
+ } else {
1786
+ this.api.pwa.prompt();
1787
+ }
1788
+ });
1789
+ }
1771
1790
  }
1772
1791
  async themeDefaults() {
1773
1792
  const theme = await getTheme(this.spoke, "login");
1793
+ const cleaned = clean(this.options, true);
1774
1794
  this.options = {
1775
- logoOnly: !this.options.title && !theme.found,
1776
1795
  ...theme,
1777
- ...clean(this.options, true)
1796
+ ...cleaned,
1797
+ logoOnly: !this.options.title && !theme.found,
1798
+ logoPosition: cleaned.logoPosition ?? theme.logoPosition ?? "left",
1799
+ hideLogo: cleaned.hideLogo ?? theme.hideLogo ?? false,
1800
+ platform: this.api.pwa.platform,
1801
+ ...Object.prototype.hasOwnProperty.call(this.api.options, "pwaSettings") && {
1802
+ pwaSettings: this.api.options.pwaSettings
1803
+ }
1778
1804
  };
1779
1805
  }
1780
1806
  /** Close the login prompt */
1781
1807
  close() {
1782
1808
  var _a, _b;
1783
- (_a = document.querySelector("#datalynk-login-css")) == null ? void 0 : _a.remove();
1809
+ (_a = document.querySelector("#datalynk-login-styles")) == null ? void 0 : _a.remove();
1784
1810
  (_b = document.querySelector("#datalynk-login")) == null ? void 0 : _b.remove();
1785
1811
  }
1786
1812
  /** Check if login prompt is still open */
@@ -1966,7 +1992,17 @@ __publicField(_LoginPrompt, "css", (options) => `
1966
1992
  #datalynk-login .login-links a {
1967
1993
  text-decoration: none;
1968
1994
  }
1969
-
1995
+
1996
+ #datalynk-login #pwa-install-link {
1997
+ display: inline-flex;
1998
+ align-items: center;
1999
+ gap: 0.4rem; /* space between icon and text */
2000
+ font-size: 16px;
2001
+ text-decoration: none;
2002
+ color: var(--theme-text);
2003
+ text-shadow: 0 0 10px black;
2004
+ }
2005
+
1970
2006
  #datalynk-login .login-links img {
1971
2007
  width: 150px;
1972
2008
  height: auto;
@@ -1989,23 +2025,28 @@ __publicField(_LoginPrompt, "css", (options) => `
1989
2025
  }
1990
2026
  </style>`);
1991
2027
  /** Dynamically create HTML */
1992
- __publicField(_LoginPrompt, "template", (options) => `
2028
+ __publicField(_LoginPrompt, "template", (options) => {
2029
+ var _a;
2030
+ return `
1993
2031
  <div id="datalynk-login">
1994
- <!-- Used to check if image is valid -->
1995
- ${!options.backgroundColor ? `
1996
- <img src="${options.background}" onerror="document.querySelector('#datalynk-login').style.backgroundImage = 'url(https://datalynk.auxiliumgroup.com/static/js/auxilium/dijits/templates/login/datalynk/background.jpg)'" style="width: 0; height: 0;"/>
1997
- ` : ""}
1998
-
2032
+ ${!options.backgroundColor ? `<img src="${options.background}" onerror="document.querySelector('#datalynk-login').style.backgroundImage = 'url(https://datalynk.auxiliumgroup.com/static/js/auxilium/dijits/templates/login/datalynk/background.jpg)'" style="width: 0; height: 0;"/>` : ""}
1999
2033
  <div class="added-links">
2000
2034
  ${(options.addLinks || []).map((link) => `<a href="${link.url || "#"}" target="_blank">${link.text}</a>`).join(" | ")}
2001
2035
  </div>
2002
2036
  <div class="login-container">
2003
- <div class="login-header">
2004
- ${options.logo ? `<img alt="Logo" src="${options.logo}" class="login-logo" style="height: 100px; width: auto;" onerror="this.style.display='none'" ${options.logoOnly ? `onload="document.querySelector('.login-title').remove()"` : ""}>` : ""}
2005
- <div style="display: flex; flex-direction: column; align-items: center; margin-left: 0.5rem;">
2037
+ <div class="login-header" style="flex-direction: ${["aboveTitle", "belowTitle", "belowSubtitle"].includes(options.logoPosition || "") ? "column" : "row"};">
2038
+ ${!options.hideLogo && options.logo && options.logoPosition === "aboveTitle" ? `<img alt="Logo" src="${options.logo}" class="login-logo" style="height: 100px; width: auto; margin-bottom: 0.5rem;" onerror="this.style.display='none'">` : ""}
2039
+
2040
+ ${!options.hideLogo && options.logo && options.logoPosition === "left" ? `<img alt="Logo" src="${options.logo}" class="login-logo" style="height: 100px; width: auto; margin-right: 0.5rem;" onerror="this.style.display='none'">` : ""}
2041
+
2042
+ <div style="display: flex; flex-direction: column; align-items: center;">
2006
2043
  <span class="login-title">${options.title || ""}</span>
2044
+ ${options.logo && !options.hideLogo && options.logoPosition === "belowTitle" ? `<img alt="Logo" src="${options.logo}" class="login-logo" style="height: 100px; width: auto; margin-top: 0.5rem;" onerror="this.style.display='none'">` : ""}
2007
2045
  ${options.subtitle ? `<span class="login-subtitle">${options.subtitle}</span>` : ""}
2046
+ ${options.logo && !options.hideLogo && options.logoPosition === "belowSubtitle" ? `<img alt="Logo" src="${options.logo}" class="login-logo" style="height: 100px; width: auto; margin-top: 0.5rem;" onerror="this.style.display='none'">` : ""}
2008
2047
  </div>
2048
+
2049
+ ${!options.hideLogo && options.logo && options.logoPosition === "right" ? `<img alt="Logo" src="${options.logo}" class="login-logo" style="height: 100px; width: auto; margin-left: 0.5rem;" onerror="this.style.display='none'">` : ""}
2009
2050
  </div>
2010
2051
  <div class="login-content">
2011
2052
  <div class="login-body" style="max-width: 300px">
@@ -2027,16 +2068,21 @@ __publicField(_LoginPrompt, "template", (options) => `
2027
2068
  <button type="submit">Login</button>
2028
2069
  </form>
2029
2070
  </div>
2030
- ${options.hideApps ? "" : `
2031
2071
  <div class="login-links" style="text-align: center">
2072
+ ${((_a = options == null ? void 0 : options.pwaSettings) == null ? void 0 : _a.loginLink) === true && !["ios", "mac"].includes(options.platform) ? `
2073
+ <a href="#" id="pwa-install-link" style="margin-right: 1rem;" title="Install App">
2074
+ <svg xmlns="http://www.w3.org/2000/svg" height="40px" viewBox="0 0 24 24" width="40px" fill="${options.color || "#0B76FC"}">
2075
+ <path d="M12 16l4-5h-3V4h-2v7H8z"/><path d="M20 18H4v-2h16v2z"/>
2076
+ </svg> Download App
2077
+ </a>` : ""}
2078
+ ${options.hideApps ? "" : `
2032
2079
  <a href="https://itunes.apple.com/ca/app/auxilium-mobile/id1166379280?mt=8" target="_blank">
2033
2080
  <img alt="App Store" src="https://datalynk.auxiliumgroup.com/api/js/auxilium/dijits/templates/login/_common/mobile_apple_transparent.png">
2034
2081
  </a>
2035
2082
  <a href="https://play.google.com/store/apps/details?id=com.auxilium.auxiliummobilesolutions&amp;hl=en" target="_blank">
2036
2083
  <img alt="Playstore" src="https://datalynk.auxiliumgroup.com/api/js/auxilium/dijits/templates/login/_common/mobile_google_transparent.png">
2037
- </a>
2084
+ </a>`}
2038
2085
  </div>
2039
- `}
2040
2086
  </div>
2041
2087
  <div class="login-footer" style="position: relative; display: flex; align-items: center; justify-content: center;">
2042
2088
  <div class="sloped-div"></div>
@@ -2047,7 +2093,8 @@ __publicField(_LoginPrompt, "template", (options) => `
2047
2093
  </div>
2048
2094
  </div>
2049
2095
  </div>
2050
- `);
2096
+ `;
2097
+ });
2051
2098
  let LoginPrompt = _LoginPrompt;
2052
2099
  class Auth {
2053
2100
  constructor(api) {
@@ -2258,10 +2305,6 @@ class PWA {
2258
2305
  constructor(api) {
2259
2306
  __publicField(this, "deferredPrompt", null);
2260
2307
  this.api = api;
2261
- window.addEventListener("beforeinstallprompt", (e) => {
2262
- e.preventDefault();
2263
- this.deferredPrompt = e;
2264
- });
2265
2308
  }
2266
2309
  // Holds the beforeinstallprompt event
2267
2310
  get iframe() {
@@ -2282,8 +2325,40 @@ class PWA {
2282
2325
  get pwa() {
2283
2326
  return matchMedia("(display-mode: standalone)").matches || (navigator == null ? void 0 : navigator.standalone) || document.referrer.includes("android-app://");
2284
2327
  }
2328
+ bindInstallButton() {
2329
+ const installBtn = document.querySelector("#installPwaBtn");
2330
+ if (!installBtn) return;
2331
+ installBtn.onclick = async () => {
2332
+ var _a;
2333
+ this.deferredPrompt.prompt();
2334
+ const choice = await this.deferredPrompt.userChoice;
2335
+ if (choice.outcome === "accepted") {
2336
+ console.log("PWA installed");
2337
+ localStorage.removeItem(`${this.api.options.name}:pwa`);
2338
+ }
2339
+ this.deferredPrompt = null;
2340
+ (_a = document.querySelector(".pwa-prompt")) == null ? void 0 : _a.remove();
2341
+ };
2342
+ }
2285
2343
  /** Setup the PWA */
2286
2344
  async setup(manifest = {}) {
2345
+ var _a, _b, _c;
2346
+ window.addEventListener("beforeinstallprompt", (e) => {
2347
+ e.preventDefault();
2348
+ this.deferredPrompt = e;
2349
+ const actions = document.querySelector(".pwa-prompt-actions");
2350
+ if (actions && !actions.querySelector("#installPwaBtn")) {
2351
+ actions.innerHTML = `<button id="installPwaBtn">Install App</button>`;
2352
+ this.bindInstallButton();
2353
+ }
2354
+ });
2355
+ const settings = {
2356
+ timeout: (((_a = this.api.options.pwaSettings) == null ? void 0 : _a.timeout) ?? 30) * 1e3,
2357
+ // default 30s
2358
+ dismissExpiry: ((_b = this.api.options.pwaSettings) == null ? void 0 : _b.dismissExpiry) ?? 7,
2359
+ // default 7 days
2360
+ loginLink: ((_c = this.api.options.pwaSettings) == null ? void 0 : _c.loginLink) ?? false
2361
+ };
2287
2362
  const meta = (key, name, value) => {
2288
2363
  const exists = document.querySelector(`meta[${key}="${name}"]`);
2289
2364
  if (value === void 0 || exists) return exists;
@@ -2299,23 +2374,36 @@ class PWA {
2299
2374
  meta("name", "apple-touch-startup-image", `https://datalynk-client.scarborough.auxilium.world/logo.png`);
2300
2375
  if (!document.querySelector('link[rel="manifest"]')) {
2301
2376
  const link = document.createElement("link");
2302
- link.setAttribute("rel", "manifest");
2303
- link.setAttribute("href", `${this.api.url}/manifest?json=${encodeURI(JSON.stringify({
2377
+ link.rel = "manifest";
2378
+ const base = String(this.api.url).replace(/\/+$/, "");
2379
+ const startUrl = location.pathname;
2380
+ const scopePath = startUrl.endsWith("/") ? startUrl : startUrl.replace(/[^/]+$/, "");
2381
+ const manifestObj = {
2304
2382
  name: this.api.options.name,
2305
2383
  short_name: this.api.options.name,
2306
- start_url: location.origin + location.pathname,
2307
- ...this.api.options.manifest,
2308
- ...manifest
2309
- }))}`);
2384
+ start_url: startUrl,
2385
+ scope: scopePath || "/",
2386
+ display: "standalone",
2387
+ ...this.api.options.manifest || {},
2388
+ ...manifest || {}
2389
+ };
2390
+ link.href = `${base}/manifest?json=${encodeURIComponent(JSON.stringify(manifestObj))}`;
2310
2391
  document.head.append(link);
2311
2392
  }
2312
2393
  if (!this.iframe && !this.pwa && this.platform != "mac") setTimeout(() => {
2313
- const dismissed = !!localStorage.getItem(`${this.api.options.name}:pwa`);
2314
- if (!dismissed) this.prompt();
2315
- }, 1e4);
2394
+ const dismissedDate = localStorage.getItem(`${this.api.options.name}:pwa`);
2395
+ if (settings.dismissExpiry > 0 && dismissedDate) {
2396
+ const diffDays = (Date.now() - new Date(dismissedDate).getTime()) / (1e3 * 60 * 60 * 24);
2397
+ if (diffDays < settings.dismissExpiry) return;
2398
+ } else if (settings.dismissExpiry === 0) {
2399
+ localStorage.removeItem(`${this.api.options.name}:pwa`);
2400
+ }
2401
+ this.prompt();
2402
+ }, settings.timeout);
2316
2403
  }
2317
2404
  /** Prompt user to install the app */
2318
2405
  async prompt(platform) {
2406
+ var _a;
2319
2407
  if (document.querySelector(".pwa-prompt")) return;
2320
2408
  const android = (platform || this.platform) == "android";
2321
2409
  let style = document.querySelector("style.pwa");
@@ -2323,129 +2411,122 @@ class PWA {
2323
2411
  style = document.createElement("style");
2324
2412
  style.classList.add("pwa");
2325
2413
  style.innerHTML = `
2326
- .pwa-prompt-backdrop {
2327
- position: fixed;
2328
- display: relative;
2329
- left: 0;
2330
- top: 0;
2331
- right: 0;
2332
- bottom: 0;
2333
- background: rgba(0,0,0,.5);
2334
- z-index: 9999;
2335
- animation: fadeIn 0.5s ease-in-out forwards;
2336
- opacity: 0;
2337
- }
2338
- .pwa-prompt-backdrop.exit {
2339
- animation: fadeOut 0.5s ease-in-out forwards !important;
2340
- }
2341
- .pwa-prompt {
2342
- position: fixed;
2343
- background: #fff;
2344
- color: black;
2345
- bottom: 0;
2346
- left: 50%;
2347
- width: min(100vw, 450px);
2348
- transform: translate(-50%, 0);
2349
- animation: slideUp 0.5s ease-in-out forwards;
2350
- }
2351
- .pwa-prompt.exit {
2352
- animation: slideDown 0.5s ease-in-out forwards !important;
2353
- }
2354
- .pwa-prompt img {
2355
- width: 18px;
2356
- height: 18px;
2357
- }
2358
- .pwa-prompt h1 {
2359
- font-size: 1.25rem;
2360
- font-weight: bold;
2361
- }
2362
- .pwa-prompt-close {
2363
- position: absolute;
2364
- right: 5px;
2365
- top: 10px;
2366
- background: transparent;
2367
- border: none;
2368
- cursor: pointer;
2369
- }
2370
-
2371
- @keyframes fadeIn {
2372
- from { opacity: 0; }
2373
- to { opacity: 1; }
2374
- }
2375
- @keyframes fadeOut {
2376
- from { opacity: 1; }
2377
- to { opacity: 0; }
2378
- }
2379
-
2380
- @keyframes slideUp {
2381
- from { transform: translate(-50%, 100%); }
2382
- to { transform: translate(-50%, 0); }
2383
- }
2384
- @keyframes slideDown {
2385
- from { transform: translate(-50%, 0); }
2386
- to { transform: translate(-50%, 100%); }
2387
- }
2388
- `;
2414
+ .pwa-prompt {
2415
+ position: fixed;
2416
+ bottom: 0;
2417
+ left: 50%;
2418
+ transform: translateX(-50%);
2419
+ background: #fff;
2420
+ color: #222;
2421
+ width: min(100vw, 450px);
2422
+ border-radius: 8px 8px 0 0;
2423
+ box-shadow: 0 -4px 12px rgba(0,0,0,0.2);
2424
+ font-family: system-ui, sans-serif;
2425
+ animation: slideUp 0.35s ease forwards;
2426
+ z-index: 10000;
2427
+ box-shadow: 0px 10px 5px 3px #0000007d;
2428
+ }
2429
+ .pwa-prompt-header {
2430
+ display: flex;
2431
+ align-items: center;
2432
+ background: linear-gradient(140deg, #080808, #454242bf);
2433
+ color: #fff;
2434
+ padding: 0.75rem 1rem;
2435
+ position: relative;
2436
+ border-radius: 10px 10px 0px 0px;
2437
+ }
2438
+ .pwa-prompt-header img {
2439
+ height: 28px;
2440
+ margin-right: 0.5rem;
2441
+ }
2442
+ .pwa-prompt-header h1 {
2443
+ font-size: 1rem;
2444
+ margin: 0;
2445
+ flex-grow: 1;
2446
+ }
2447
+ .pwa-prompt-close {
2448
+ position: absolute;
2449
+ right: 12px;
2450
+ top: 10px;
2451
+ background: transparent;
2452
+ border: none;
2453
+ color: #fff;
2454
+ font-size: 18px;
2455
+ cursor: pointer;
2456
+ }
2457
+ .pwa-prompt-body {
2458
+ padding: 1rem;
2459
+ font-size: 0.9rem;
2460
+ text-align: center;
2461
+ }
2462
+ .pwa-prompt-actions {
2463
+ text-align: center;
2464
+ padding: 0.75rem 1rem 1rem;
2465
+ }
2466
+ .pwa-prompt-actions button {
2467
+ background: #c33031;
2468
+ color: #fff;
2469
+ border: none;
2470
+ padding: 0.6rem 1.2rem;
2471
+ border-radius: 6px;
2472
+ cursor: pointer;
2473
+ font-size: 0.9rem;
2474
+ }
2475
+ .pwa-steps ol {
2476
+ padding-left: 1.25rem;
2477
+ text-align: left;
2478
+ }
2479
+ .pwa-prompt-actions table {
2480
+ width: 100%;
2481
+ margin: 0;
2482
+ }
2483
+ .pwa-prompt-actions td {
2484
+ padding: 0.5rem;
2485
+ }
2486
+ @keyframes slideUp {
2487
+ from { transform: translate(-50%, 100%); opacity: 0; }
2488
+ to { transform: translate(-50%, 0); opacity: 1; }
2489
+ }`;
2389
2490
  document.head.append(style);
2390
2491
  }
2391
- const backdrop = document.createElement("div");
2392
- backdrop.classList.add("pwa-prompt-backdrop");
2393
2492
  const prompt = document.createElement("div");
2394
2493
  prompt.classList.add("pwa-prompt");
2395
2494
  prompt.innerHTML = `
2396
- <div style="display: flex; padding: 1rem; align-items: center">
2397
- <img src="https://datalynk-client.scarborough.auxilium.world/logo.png" alt="Logo" style="height: 40px; width: auto; margin-right: .5rem;" />
2398
- <h1 style="margin: 0">Install ${this.api.options.name}</h1>
2495
+ <div class="pwa-prompt-header">
2496
+ <img src="https://datalynk-client.scarborough.auxilium.world/logo.png" alt="Logo" />
2497
+ <h1>Install ${this.api.options.name}</h1>
2498
+ <button class="pwa-prompt-close">&times;</button>
2499
+ </div>
2500
+ <div class="pwa-prompt-body">
2501
+ ${this.deferredPrompt ? "Click below to install the app directly to your device." : "Add this app to your home screen for a faster, fullscreen experience."}
2502
+ </div>
2503
+ <div class="pwa-prompt-actions">
2504
+ ${this.deferredPrompt ? `<button id="installPwaBtn">Install App</button>` : `
2505
+ <table>
2506
+ <tr>
2507
+ <td style="width:40px;text-align:center">
2508
+ ${android ? '<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="black" style="transform: scale(1.5)"><path d="M480-160q-33 0-56.5-23.5T400-240q0-33 23.5-56.5T480-320q33 0 56.5 23.5T560-240q0 33-23.5 56.5T480-160Zm0-240q-33 0-56.5-23.5T400-480q0-33 23.5-56.5T480-560q33 0 56.5 23.5T560-480q0 33-23.5 56.5T480-400Zm0-240q-33 0-56.5-23.5T400-720q0-33 23.5-56.5T480-800q33 0 56.5 23.5T560-720q0 33-23.5 56.5T480-640Z"/></svg>' : '<svg viewBox="0 0 566 670" xmlns="http://www.w3.org/2000/svg" fill="#c33031" height="40px"><path d="M255 12c4-4 10-8 16-8s12 3 16 8l94 89c3 4 6 7 8 12 2 6 0 14-5 19-7 8-20 9-28 2l-7-7-57-60 2 54v276c0 12-10 22-22 22-12 1-24-10-23-22V110l1-43-60 65c-5 5-13 8-21 6a19 19 0 0 1-16-17c-1-7 2-13 7-18l95-91z" /><path d="M43 207c16-17 40-23 63-23h83v46h-79c-12 0-25 3-33 13-8 9-10 21-10 33v260c0 13 0 27 6 38 5 12 18 18 30 19l14 1h302c14 0 28 0 40-8 11-7 16-21 16-34V276c0-11-2-24-9-33-8-10-22-13-34-13h-78v-46h75c13 0 25 1 37 4 16 4 31 13 41 27 11 17 14 37 14 57v280c0 20-3 41-15 58a71 71 0 0 1-45 27c-11 2-23 3-34 3H109c-19-1-40-4-56-15-14-9-23-23-27-38-4-12-5-25-5-38V270c1-22 6-47 22-63z" /></svg>'}
2509
+ </td>
2510
+ <td>1) ${android ? "Open the dropdown menu" : 'Tap the "Share" button'}</td>
2511
+ </tr>
2512
+ <tr>
2513
+ <td style="width:40px;text-align:center">
2514
+ ${android ? '<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="black" style="transform: scale(-1.5, 1.5)"><path d="M280-40q-33 0-56.5-23.5T200-120v-720q0-33 23.5-56.5T280-920h280v80H280v40h280v80H280v480h400v-80h80v200q0 33-23.5 56.5T680-40H280Zm0-120v40h400v-40H280Zm440-240L520-600l56-56 104 104v-288h80v288l104-104 56 56-200 200ZM280-800v-40 40Zm0 640v40-40Z"/></svg>' : '<svg viewBox="0 0 578 584" xmlns="http://www.w3.org/2000/svg" fill="black" height="34px"><path d="M101 35l19-1h333c12 0 23 0 35 3 17 3 34 12 44 27 13 16 16 38 16 58v329c0 19 0 39-8 57a65 65 0 0 1-37 37c-18 7-38 7-57 7H130c-21 1-44 0-63-10-14-7-25-20-30-34-6-15-8-30-8-45V121c1-21 5-44 19-61 13-16 33-23 53-25m7 46c-10 1-19 6-24 14-7 8-9 20-9 31v334c0 12 2 25 10 34 9 10 23 12 35 12h336c14 1 30-3 38-15 6-9 8-20 8-31V125c0-12-2-24-10-33-9-9-22-12-35-12H121l-13 1z" /><path d="M271 161c9-11 31-10 38 4 3 5 3 11 3 17v87h88c7 0 16 1 21 7 6 6 7 14 6 22a21 21 0 0 1-10 14c-5 4-11 5-17 5h-88v82c0 7-1 15-6 20-10 10-29 10-37-2-3-6-4-13-4-19v-81h-87c-8-1-17-3-23-9-5-6-6-15-4-22a21 21 0 0 1 11-14c6-3 13-3 19-3h84v-88c0-7 1-14 6-20z" /></svg>'}
2515
+ </td>
2516
+ <td>2) Select "Add to Home Screen"</td>
2517
+ </tr>
2518
+ </table>
2519
+ `}
2399
2520
  </div>
2400
- <div style="display: flex; flex-direction: column; align-items: center">
2401
- <div style="border-top: 2px solid #00000020; border-bottom: 2px solid #00000020; padding: 0 1rem">
2402
- <p style="margin-top: 1rem; text-align: center">
2403
- ${this.deferredPrompt ? "Click the button below to install the app directly to your device." : "This website can be installed as an App! Add it to your home screen for quick access & fullscreen use."}
2404
- </p>
2405
- </div>
2406
- ${this.deferredPrompt ? `<button id="installPwaBtn" style="background:#0B76FC;color:white;border:none;padding:.5rem 1rem;border-radius:5px;cursor:pointer;margin:1rem 0">Install</button>` : `
2407
- <table style="margin: 1.5rem 0">
2408
- <tr>
2409
- <td style="width: 50px; text-align: center">
2410
- ${android ? '<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="black" style="transform: scale(1.5)">...</svg>' : '<svg viewBox="0 0 566 670" xmlns="http://www.w3.org/2000/svg" fill="#0B76FC" height="40px">...</svg>'}
2411
- </td>
2412
- <td><p style="margin: 1rem 0">1) ${android ? "Open the dropdown menu" : 'Press the "Share" button'}</p></td>
2413
- </tr>
2414
- <tr>
2415
- <td style="width: 50px; text-align: center">
2416
- ${android ? '<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px">...</svg>' : '<svg viewBox="0 0 578 584" xmlns="http://www.w3.org/2000/svg" fill="black" height="34px">...</svg>'}
2417
- </td>
2418
- <td><p style="margin: 1rem 0">2) Press "Add to Home Screen"</p></td>
2419
- </tr>
2420
- </table>`}
2421
- </div>`;
2422
- const close = document.createElement("button");
2423
- close.classList.add("pwa-prompt-close");
2424
- close.innerText = "x";
2425
- close.onclick = () => {
2426
- prompt.classList.add("exit");
2427
- backdrop.classList.add("exit");
2428
- localStorage.setItem(`${this.api.options.name}:pwa`, "dismissed");
2429
- setTimeout(() => {
2430
- prompt.remove();
2431
- backdrop.remove();
2432
- }, 500);
2521
+ `;
2522
+ const closeBtn = prompt.querySelector(".pwa-prompt-close");
2523
+ const dismissExpiry = ((_a = this.api.options.pwaSettings) == null ? void 0 : _a.dismissExpiry) ?? 7;
2524
+ closeBtn.onclick = () => {
2525
+ dismissExpiry > 0 ? localStorage.setItem(`${this.api.options.name}:pwa`, (/* @__PURE__ */ new Date()).toISOString()) : localStorage.removeItem(`${this.api.options.name}:pwa`);
2526
+ prompt.remove();
2433
2527
  };
2434
- prompt.append(close);
2435
- backdrop.append(prompt);
2436
- document.body.append(backdrop);
2437
- if (this.deferredPrompt) {
2438
- const installBtn = prompt.querySelector("#installPwaBtn");
2439
- if (installBtn) {
2440
- installBtn.onclick = async () => {
2441
- this.deferredPrompt.prompt();
2442
- const choice = await this.deferredPrompt.userChoice;
2443
- if (choice.outcome === "accepted") console.log("PWA installed");
2444
- this.deferredPrompt = null;
2445
- close.click();
2446
- };
2447
- }
2448
- }
2528
+ document.body.append(prompt);
2529
+ if (this.deferredPrompt) this.bindInstallButton();
2449
2530
  }
2450
2531
  }
2451
2532
  class Files {
@@ -3371,7 +3452,7 @@ class Superuser {
3371
3452
  } });
3372
3453
  }
3373
3454
  }
3374
- const version = "1.2.92";
3455
+ const version = "1.3.1";
3375
3456
  class WebRtc {
3376
3457
  constructor(api) {
3377
3458
  __publicField(this, "ice");
package/dist/index.mjs CHANGED
@@ -1717,6 +1717,8 @@ async function getTheme(spoke, scope) {
1717
1717
  color: "#c83232",
1718
1718
  glow: "#c83232",
1719
1719
  logo: `https://${spoke}.auxiliumgroup.com/static/js/auxilium/dijits/templates/login/${spoke}/logo.png`,
1720
+ logoPosition: "left",
1721
+ hideLogo: false,
1720
1722
  hideApps: false,
1721
1723
  persist: true,
1722
1724
  title: spoke.toUpperCase(),
@@ -1766,19 +1768,43 @@ const _LoginPrompt = class _LoginPrompt {
1766
1768
  this.username = document.querySelector('#datalynk-login-form input[name="username"]');
1767
1769
  if (this.options.persist === false) this.persist.parentElement.remove();
1768
1770
  this.form.onsubmit = (event) => this.login(event);
1771
+ const pwaLink = document.querySelector("#pwa-install-link");
1772
+ if (pwaLink) {
1773
+ pwaLink.addEventListener("click", async (e) => {
1774
+ var _a;
1775
+ e.preventDefault();
1776
+ if ((_a = this.api.pwa) == null ? void 0 : _a.deferredPrompt) {
1777
+ this.api.pwa.deferredPrompt.prompt();
1778
+ const choice = await this.api.pwa.deferredPrompt.userChoice;
1779
+ if (choice.outcome === "accepted") {
1780
+ console.log("PWA installed via login link");
1781
+ }
1782
+ this.api.pwa.deferredPrompt = null;
1783
+ } else {
1784
+ this.api.pwa.prompt();
1785
+ }
1786
+ });
1787
+ }
1769
1788
  }
1770
1789
  async themeDefaults() {
1771
1790
  const theme = await getTheme(this.spoke, "login");
1791
+ const cleaned = clean(this.options, true);
1772
1792
  this.options = {
1773
- logoOnly: !this.options.title && !theme.found,
1774
1793
  ...theme,
1775
- ...clean(this.options, true)
1794
+ ...cleaned,
1795
+ logoOnly: !this.options.title && !theme.found,
1796
+ logoPosition: cleaned.logoPosition ?? theme.logoPosition ?? "left",
1797
+ hideLogo: cleaned.hideLogo ?? theme.hideLogo ?? false,
1798
+ platform: this.api.pwa.platform,
1799
+ ...Object.prototype.hasOwnProperty.call(this.api.options, "pwaSettings") && {
1800
+ pwaSettings: this.api.options.pwaSettings
1801
+ }
1776
1802
  };
1777
1803
  }
1778
1804
  /** Close the login prompt */
1779
1805
  close() {
1780
1806
  var _a, _b;
1781
- (_a = document.querySelector("#datalynk-login-css")) == null ? void 0 : _a.remove();
1807
+ (_a = document.querySelector("#datalynk-login-styles")) == null ? void 0 : _a.remove();
1782
1808
  (_b = document.querySelector("#datalynk-login")) == null ? void 0 : _b.remove();
1783
1809
  }
1784
1810
  /** Check if login prompt is still open */
@@ -1964,7 +1990,17 @@ __publicField(_LoginPrompt, "css", (options) => `
1964
1990
  #datalynk-login .login-links a {
1965
1991
  text-decoration: none;
1966
1992
  }
1967
-
1993
+
1994
+ #datalynk-login #pwa-install-link {
1995
+ display: inline-flex;
1996
+ align-items: center;
1997
+ gap: 0.4rem; /* space between icon and text */
1998
+ font-size: 16px;
1999
+ text-decoration: none;
2000
+ color: var(--theme-text);
2001
+ text-shadow: 0 0 10px black;
2002
+ }
2003
+
1968
2004
  #datalynk-login .login-links img {
1969
2005
  width: 150px;
1970
2006
  height: auto;
@@ -1987,23 +2023,28 @@ __publicField(_LoginPrompt, "css", (options) => `
1987
2023
  }
1988
2024
  </style>`);
1989
2025
  /** Dynamically create HTML */
1990
- __publicField(_LoginPrompt, "template", (options) => `
2026
+ __publicField(_LoginPrompt, "template", (options) => {
2027
+ var _a;
2028
+ return `
1991
2029
  <div id="datalynk-login">
1992
- <!-- Used to check if image is valid -->
1993
- ${!options.backgroundColor ? `
1994
- <img src="${options.background}" onerror="document.querySelector('#datalynk-login').style.backgroundImage = 'url(https://datalynk.auxiliumgroup.com/static/js/auxilium/dijits/templates/login/datalynk/background.jpg)'" style="width: 0; height: 0;"/>
1995
- ` : ""}
1996
-
2030
+ ${!options.backgroundColor ? `<img src="${options.background}" onerror="document.querySelector('#datalynk-login').style.backgroundImage = 'url(https://datalynk.auxiliumgroup.com/static/js/auxilium/dijits/templates/login/datalynk/background.jpg)'" style="width: 0; height: 0;"/>` : ""}
1997
2031
  <div class="added-links">
1998
2032
  ${(options.addLinks || []).map((link) => `<a href="${link.url || "#"}" target="_blank">${link.text}</a>`).join(" | ")}
1999
2033
  </div>
2000
2034
  <div class="login-container">
2001
- <div class="login-header">
2002
- ${options.logo ? `<img alt="Logo" src="${options.logo}" class="login-logo" style="height: 100px; width: auto;" onerror="this.style.display='none'" ${options.logoOnly ? `onload="document.querySelector('.login-title').remove()"` : ""}>` : ""}
2003
- <div style="display: flex; flex-direction: column; align-items: center; margin-left: 0.5rem;">
2035
+ <div class="login-header" style="flex-direction: ${["aboveTitle", "belowTitle", "belowSubtitle"].includes(options.logoPosition || "") ? "column" : "row"};">
2036
+ ${!options.hideLogo && options.logo && options.logoPosition === "aboveTitle" ? `<img alt="Logo" src="${options.logo}" class="login-logo" style="height: 100px; width: auto; margin-bottom: 0.5rem;" onerror="this.style.display='none'">` : ""}
2037
+
2038
+ ${!options.hideLogo && options.logo && options.logoPosition === "left" ? `<img alt="Logo" src="${options.logo}" class="login-logo" style="height: 100px; width: auto; margin-right: 0.5rem;" onerror="this.style.display='none'">` : ""}
2039
+
2040
+ <div style="display: flex; flex-direction: column; align-items: center;">
2004
2041
  <span class="login-title">${options.title || ""}</span>
2042
+ ${options.logo && !options.hideLogo && options.logoPosition === "belowTitle" ? `<img alt="Logo" src="${options.logo}" class="login-logo" style="height: 100px; width: auto; margin-top: 0.5rem;" onerror="this.style.display='none'">` : ""}
2005
2043
  ${options.subtitle ? `<span class="login-subtitle">${options.subtitle}</span>` : ""}
2044
+ ${options.logo && !options.hideLogo && options.logoPosition === "belowSubtitle" ? `<img alt="Logo" src="${options.logo}" class="login-logo" style="height: 100px; width: auto; margin-top: 0.5rem;" onerror="this.style.display='none'">` : ""}
2006
2045
  </div>
2046
+
2047
+ ${!options.hideLogo && options.logo && options.logoPosition === "right" ? `<img alt="Logo" src="${options.logo}" class="login-logo" style="height: 100px; width: auto; margin-left: 0.5rem;" onerror="this.style.display='none'">` : ""}
2007
2048
  </div>
2008
2049
  <div class="login-content">
2009
2050
  <div class="login-body" style="max-width: 300px">
@@ -2025,16 +2066,21 @@ __publicField(_LoginPrompt, "template", (options) => `
2025
2066
  <button type="submit">Login</button>
2026
2067
  </form>
2027
2068
  </div>
2028
- ${options.hideApps ? "" : `
2029
2069
  <div class="login-links" style="text-align: center">
2070
+ ${((_a = options == null ? void 0 : options.pwaSettings) == null ? void 0 : _a.loginLink) === true && !["ios", "mac"].includes(options.platform) ? `
2071
+ <a href="#" id="pwa-install-link" style="margin-right: 1rem;" title="Install App">
2072
+ <svg xmlns="http://www.w3.org/2000/svg" height="40px" viewBox="0 0 24 24" width="40px" fill="${options.color || "#0B76FC"}">
2073
+ <path d="M12 16l4-5h-3V4h-2v7H8z"/><path d="M20 18H4v-2h16v2z"/>
2074
+ </svg> Download App
2075
+ </a>` : ""}
2076
+ ${options.hideApps ? "" : `
2030
2077
  <a href="https://itunes.apple.com/ca/app/auxilium-mobile/id1166379280?mt=8" target="_blank">
2031
2078
  <img alt="App Store" src="https://datalynk.auxiliumgroup.com/api/js/auxilium/dijits/templates/login/_common/mobile_apple_transparent.png">
2032
2079
  </a>
2033
2080
  <a href="https://play.google.com/store/apps/details?id=com.auxilium.auxiliummobilesolutions&amp;hl=en" target="_blank">
2034
2081
  <img alt="Playstore" src="https://datalynk.auxiliumgroup.com/api/js/auxilium/dijits/templates/login/_common/mobile_google_transparent.png">
2035
- </a>
2082
+ </a>`}
2036
2083
  </div>
2037
- `}
2038
2084
  </div>
2039
2085
  <div class="login-footer" style="position: relative; display: flex; align-items: center; justify-content: center;">
2040
2086
  <div class="sloped-div"></div>
@@ -2045,7 +2091,8 @@ __publicField(_LoginPrompt, "template", (options) => `
2045
2091
  </div>
2046
2092
  </div>
2047
2093
  </div>
2048
- `);
2094
+ `;
2095
+ });
2049
2096
  let LoginPrompt = _LoginPrompt;
2050
2097
  class Auth {
2051
2098
  constructor(api) {
@@ -2256,10 +2303,6 @@ class PWA {
2256
2303
  constructor(api) {
2257
2304
  __publicField(this, "deferredPrompt", null);
2258
2305
  this.api = api;
2259
- window.addEventListener("beforeinstallprompt", (e) => {
2260
- e.preventDefault();
2261
- this.deferredPrompt = e;
2262
- });
2263
2306
  }
2264
2307
  // Holds the beforeinstallprompt event
2265
2308
  get iframe() {
@@ -2280,8 +2323,40 @@ class PWA {
2280
2323
  get pwa() {
2281
2324
  return matchMedia("(display-mode: standalone)").matches || (navigator == null ? void 0 : navigator.standalone) || document.referrer.includes("android-app://");
2282
2325
  }
2326
+ bindInstallButton() {
2327
+ const installBtn = document.querySelector("#installPwaBtn");
2328
+ if (!installBtn) return;
2329
+ installBtn.onclick = async () => {
2330
+ var _a;
2331
+ this.deferredPrompt.prompt();
2332
+ const choice = await this.deferredPrompt.userChoice;
2333
+ if (choice.outcome === "accepted") {
2334
+ console.log("PWA installed");
2335
+ localStorage.removeItem(`${this.api.options.name}:pwa`);
2336
+ }
2337
+ this.deferredPrompt = null;
2338
+ (_a = document.querySelector(".pwa-prompt")) == null ? void 0 : _a.remove();
2339
+ };
2340
+ }
2283
2341
  /** Setup the PWA */
2284
2342
  async setup(manifest = {}) {
2343
+ var _a, _b, _c;
2344
+ window.addEventListener("beforeinstallprompt", (e) => {
2345
+ e.preventDefault();
2346
+ this.deferredPrompt = e;
2347
+ const actions = document.querySelector(".pwa-prompt-actions");
2348
+ if (actions && !actions.querySelector("#installPwaBtn")) {
2349
+ actions.innerHTML = `<button id="installPwaBtn">Install App</button>`;
2350
+ this.bindInstallButton();
2351
+ }
2352
+ });
2353
+ const settings = {
2354
+ timeout: (((_a = this.api.options.pwaSettings) == null ? void 0 : _a.timeout) ?? 30) * 1e3,
2355
+ // default 30s
2356
+ dismissExpiry: ((_b = this.api.options.pwaSettings) == null ? void 0 : _b.dismissExpiry) ?? 7,
2357
+ // default 7 days
2358
+ loginLink: ((_c = this.api.options.pwaSettings) == null ? void 0 : _c.loginLink) ?? false
2359
+ };
2285
2360
  const meta = (key, name, value) => {
2286
2361
  const exists = document.querySelector(`meta[${key}="${name}"]`);
2287
2362
  if (value === void 0 || exists) return exists;
@@ -2297,23 +2372,36 @@ class PWA {
2297
2372
  meta("name", "apple-touch-startup-image", `https://datalynk-client.scarborough.auxilium.world/logo.png`);
2298
2373
  if (!document.querySelector('link[rel="manifest"]')) {
2299
2374
  const link = document.createElement("link");
2300
- link.setAttribute("rel", "manifest");
2301
- link.setAttribute("href", `${this.api.url}/manifest?json=${encodeURI(JSON.stringify({
2375
+ link.rel = "manifest";
2376
+ const base = String(this.api.url).replace(/\/+$/, "");
2377
+ const startUrl = location.pathname;
2378
+ const scopePath = startUrl.endsWith("/") ? startUrl : startUrl.replace(/[^/]+$/, "");
2379
+ const manifestObj = {
2302
2380
  name: this.api.options.name,
2303
2381
  short_name: this.api.options.name,
2304
- start_url: location.origin + location.pathname,
2305
- ...this.api.options.manifest,
2306
- ...manifest
2307
- }))}`);
2382
+ start_url: startUrl,
2383
+ scope: scopePath || "/",
2384
+ display: "standalone",
2385
+ ...this.api.options.manifest || {},
2386
+ ...manifest || {}
2387
+ };
2388
+ link.href = `${base}/manifest?json=${encodeURIComponent(JSON.stringify(manifestObj))}`;
2308
2389
  document.head.append(link);
2309
2390
  }
2310
2391
  if (!this.iframe && !this.pwa && this.platform != "mac") setTimeout(() => {
2311
- const dismissed = !!localStorage.getItem(`${this.api.options.name}:pwa`);
2312
- if (!dismissed) this.prompt();
2313
- }, 1e4);
2392
+ const dismissedDate = localStorage.getItem(`${this.api.options.name}:pwa`);
2393
+ if (settings.dismissExpiry > 0 && dismissedDate) {
2394
+ const diffDays = (Date.now() - new Date(dismissedDate).getTime()) / (1e3 * 60 * 60 * 24);
2395
+ if (diffDays < settings.dismissExpiry) return;
2396
+ } else if (settings.dismissExpiry === 0) {
2397
+ localStorage.removeItem(`${this.api.options.name}:pwa`);
2398
+ }
2399
+ this.prompt();
2400
+ }, settings.timeout);
2314
2401
  }
2315
2402
  /** Prompt user to install the app */
2316
2403
  async prompt(platform) {
2404
+ var _a;
2317
2405
  if (document.querySelector(".pwa-prompt")) return;
2318
2406
  const android = (platform || this.platform) == "android";
2319
2407
  let style = document.querySelector("style.pwa");
@@ -2321,129 +2409,122 @@ class PWA {
2321
2409
  style = document.createElement("style");
2322
2410
  style.classList.add("pwa");
2323
2411
  style.innerHTML = `
2324
- .pwa-prompt-backdrop {
2325
- position: fixed;
2326
- display: relative;
2327
- left: 0;
2328
- top: 0;
2329
- right: 0;
2330
- bottom: 0;
2331
- background: rgba(0,0,0,.5);
2332
- z-index: 9999;
2333
- animation: fadeIn 0.5s ease-in-out forwards;
2334
- opacity: 0;
2335
- }
2336
- .pwa-prompt-backdrop.exit {
2337
- animation: fadeOut 0.5s ease-in-out forwards !important;
2338
- }
2339
- .pwa-prompt {
2340
- position: fixed;
2341
- background: #fff;
2342
- color: black;
2343
- bottom: 0;
2344
- left: 50%;
2345
- width: min(100vw, 450px);
2346
- transform: translate(-50%, 0);
2347
- animation: slideUp 0.5s ease-in-out forwards;
2348
- }
2349
- .pwa-prompt.exit {
2350
- animation: slideDown 0.5s ease-in-out forwards !important;
2351
- }
2352
- .pwa-prompt img {
2353
- width: 18px;
2354
- height: 18px;
2355
- }
2356
- .pwa-prompt h1 {
2357
- font-size: 1.25rem;
2358
- font-weight: bold;
2359
- }
2360
- .pwa-prompt-close {
2361
- position: absolute;
2362
- right: 5px;
2363
- top: 10px;
2364
- background: transparent;
2365
- border: none;
2366
- cursor: pointer;
2367
- }
2368
-
2369
- @keyframes fadeIn {
2370
- from { opacity: 0; }
2371
- to { opacity: 1; }
2372
- }
2373
- @keyframes fadeOut {
2374
- from { opacity: 1; }
2375
- to { opacity: 0; }
2376
- }
2377
-
2378
- @keyframes slideUp {
2379
- from { transform: translate(-50%, 100%); }
2380
- to { transform: translate(-50%, 0); }
2381
- }
2382
- @keyframes slideDown {
2383
- from { transform: translate(-50%, 0); }
2384
- to { transform: translate(-50%, 100%); }
2385
- }
2386
- `;
2412
+ .pwa-prompt {
2413
+ position: fixed;
2414
+ bottom: 0;
2415
+ left: 50%;
2416
+ transform: translateX(-50%);
2417
+ background: #fff;
2418
+ color: #222;
2419
+ width: min(100vw, 450px);
2420
+ border-radius: 8px 8px 0 0;
2421
+ box-shadow: 0 -4px 12px rgba(0,0,0,0.2);
2422
+ font-family: system-ui, sans-serif;
2423
+ animation: slideUp 0.35s ease forwards;
2424
+ z-index: 10000;
2425
+ box-shadow: 0px 10px 5px 3px #0000007d;
2426
+ }
2427
+ .pwa-prompt-header {
2428
+ display: flex;
2429
+ align-items: center;
2430
+ background: linear-gradient(140deg, #080808, #454242bf);
2431
+ color: #fff;
2432
+ padding: 0.75rem 1rem;
2433
+ position: relative;
2434
+ border-radius: 10px 10px 0px 0px;
2435
+ }
2436
+ .pwa-prompt-header img {
2437
+ height: 28px;
2438
+ margin-right: 0.5rem;
2439
+ }
2440
+ .pwa-prompt-header h1 {
2441
+ font-size: 1rem;
2442
+ margin: 0;
2443
+ flex-grow: 1;
2444
+ }
2445
+ .pwa-prompt-close {
2446
+ position: absolute;
2447
+ right: 12px;
2448
+ top: 10px;
2449
+ background: transparent;
2450
+ border: none;
2451
+ color: #fff;
2452
+ font-size: 18px;
2453
+ cursor: pointer;
2454
+ }
2455
+ .pwa-prompt-body {
2456
+ padding: 1rem;
2457
+ font-size: 0.9rem;
2458
+ text-align: center;
2459
+ }
2460
+ .pwa-prompt-actions {
2461
+ text-align: center;
2462
+ padding: 0.75rem 1rem 1rem;
2463
+ }
2464
+ .pwa-prompt-actions button {
2465
+ background: #c33031;
2466
+ color: #fff;
2467
+ border: none;
2468
+ padding: 0.6rem 1.2rem;
2469
+ border-radius: 6px;
2470
+ cursor: pointer;
2471
+ font-size: 0.9rem;
2472
+ }
2473
+ .pwa-steps ol {
2474
+ padding-left: 1.25rem;
2475
+ text-align: left;
2476
+ }
2477
+ .pwa-prompt-actions table {
2478
+ width: 100%;
2479
+ margin: 0;
2480
+ }
2481
+ .pwa-prompt-actions td {
2482
+ padding: 0.5rem;
2483
+ }
2484
+ @keyframes slideUp {
2485
+ from { transform: translate(-50%, 100%); opacity: 0; }
2486
+ to { transform: translate(-50%, 0); opacity: 1; }
2487
+ }`;
2387
2488
  document.head.append(style);
2388
2489
  }
2389
- const backdrop = document.createElement("div");
2390
- backdrop.classList.add("pwa-prompt-backdrop");
2391
2490
  const prompt = document.createElement("div");
2392
2491
  prompt.classList.add("pwa-prompt");
2393
2492
  prompt.innerHTML = `
2394
- <div style="display: flex; padding: 1rem; align-items: center">
2395
- <img src="https://datalynk-client.scarborough.auxilium.world/logo.png" alt="Logo" style="height: 40px; width: auto; margin-right: .5rem;" />
2396
- <h1 style="margin: 0">Install ${this.api.options.name}</h1>
2493
+ <div class="pwa-prompt-header">
2494
+ <img src="https://datalynk-client.scarborough.auxilium.world/logo.png" alt="Logo" />
2495
+ <h1>Install ${this.api.options.name}</h1>
2496
+ <button class="pwa-prompt-close">&times;</button>
2497
+ </div>
2498
+ <div class="pwa-prompt-body">
2499
+ ${this.deferredPrompt ? "Click below to install the app directly to your device." : "Add this app to your home screen for a faster, fullscreen experience."}
2500
+ </div>
2501
+ <div class="pwa-prompt-actions">
2502
+ ${this.deferredPrompt ? `<button id="installPwaBtn">Install App</button>` : `
2503
+ <table>
2504
+ <tr>
2505
+ <td style="width:40px;text-align:center">
2506
+ ${android ? '<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="black" style="transform: scale(1.5)"><path d="M480-160q-33 0-56.5-23.5T400-240q0-33 23.5-56.5T480-320q33 0 56.5 23.5T560-240q0 33-23.5 56.5T480-160Zm0-240q-33 0-56.5-23.5T400-480q0-33 23.5-56.5T480-560q33 0 56.5 23.5T560-480q0 33-23.5 56.5T480-400Zm0-240q-33 0-56.5-23.5T400-720q0-33 23.5-56.5T480-800q33 0 56.5 23.5T560-720q0 33-23.5 56.5T480-640Z"/></svg>' : '<svg viewBox="0 0 566 670" xmlns="http://www.w3.org/2000/svg" fill="#c33031" height="40px"><path d="M255 12c4-4 10-8 16-8s12 3 16 8l94 89c3 4 6 7 8 12 2 6 0 14-5 19-7 8-20 9-28 2l-7-7-57-60 2 54v276c0 12-10 22-22 22-12 1-24-10-23-22V110l1-43-60 65c-5 5-13 8-21 6a19 19 0 0 1-16-17c-1-7 2-13 7-18l95-91z" /><path d="M43 207c16-17 40-23 63-23h83v46h-79c-12 0-25 3-33 13-8 9-10 21-10 33v260c0 13 0 27 6 38 5 12 18 18 30 19l14 1h302c14 0 28 0 40-8 11-7 16-21 16-34V276c0-11-2-24-9-33-8-10-22-13-34-13h-78v-46h75c13 0 25 1 37 4 16 4 31 13 41 27 11 17 14 37 14 57v280c0 20-3 41-15 58a71 71 0 0 1-45 27c-11 2-23 3-34 3H109c-19-1-40-4-56-15-14-9-23-23-27-38-4-12-5-25-5-38V270c1-22 6-47 22-63z" /></svg>'}
2507
+ </td>
2508
+ <td>1) ${android ? "Open the dropdown menu" : 'Tap the "Share" button'}</td>
2509
+ </tr>
2510
+ <tr>
2511
+ <td style="width:40px;text-align:center">
2512
+ ${android ? '<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="black" style="transform: scale(-1.5, 1.5)"><path d="M280-40q-33 0-56.5-23.5T200-120v-720q0-33 23.5-56.5T280-920h280v80H280v40h280v80H280v480h400v-80h80v200q0 33-23.5 56.5T680-40H280Zm0-120v40h400v-40H280Zm440-240L520-600l56-56 104 104v-288h80v288l104-104 56 56-200 200ZM280-800v-40 40Zm0 640v40-40Z"/></svg>' : '<svg viewBox="0 0 578 584" xmlns="http://www.w3.org/2000/svg" fill="black" height="34px"><path d="M101 35l19-1h333c12 0 23 0 35 3 17 3 34 12 44 27 13 16 16 38 16 58v329c0 19 0 39-8 57a65 65 0 0 1-37 37c-18 7-38 7-57 7H130c-21 1-44 0-63-10-14-7-25-20-30-34-6-15-8-30-8-45V121c1-21 5-44 19-61 13-16 33-23 53-25m7 46c-10 1-19 6-24 14-7 8-9 20-9 31v334c0 12 2 25 10 34 9 10 23 12 35 12h336c14 1 30-3 38-15 6-9 8-20 8-31V125c0-12-2-24-10-33-9-9-22-12-35-12H121l-13 1z" /><path d="M271 161c9-11 31-10 38 4 3 5 3 11 3 17v87h88c7 0 16 1 21 7 6 6 7 14 6 22a21 21 0 0 1-10 14c-5 4-11 5-17 5h-88v82c0 7-1 15-6 20-10 10-29 10-37-2-3-6-4-13-4-19v-81h-87c-8-1-17-3-23-9-5-6-6-15-4-22a21 21 0 0 1 11-14c6-3 13-3 19-3h84v-88c0-7 1-14 6-20z" /></svg>'}
2513
+ </td>
2514
+ <td>2) Select "Add to Home Screen"</td>
2515
+ </tr>
2516
+ </table>
2517
+ `}
2397
2518
  </div>
2398
- <div style="display: flex; flex-direction: column; align-items: center">
2399
- <div style="border-top: 2px solid #00000020; border-bottom: 2px solid #00000020; padding: 0 1rem">
2400
- <p style="margin-top: 1rem; text-align: center">
2401
- ${this.deferredPrompt ? "Click the button below to install the app directly to your device." : "This website can be installed as an App! Add it to your home screen for quick access & fullscreen use."}
2402
- </p>
2403
- </div>
2404
- ${this.deferredPrompt ? `<button id="installPwaBtn" style="background:#0B76FC;color:white;border:none;padding:.5rem 1rem;border-radius:5px;cursor:pointer;margin:1rem 0">Install</button>` : `
2405
- <table style="margin: 1.5rem 0">
2406
- <tr>
2407
- <td style="width: 50px; text-align: center">
2408
- ${android ? '<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="black" style="transform: scale(1.5)">...</svg>' : '<svg viewBox="0 0 566 670" xmlns="http://www.w3.org/2000/svg" fill="#0B76FC" height="40px">...</svg>'}
2409
- </td>
2410
- <td><p style="margin: 1rem 0">1) ${android ? "Open the dropdown menu" : 'Press the "Share" button'}</p></td>
2411
- </tr>
2412
- <tr>
2413
- <td style="width: 50px; text-align: center">
2414
- ${android ? '<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px">...</svg>' : '<svg viewBox="0 0 578 584" xmlns="http://www.w3.org/2000/svg" fill="black" height="34px">...</svg>'}
2415
- </td>
2416
- <td><p style="margin: 1rem 0">2) Press "Add to Home Screen"</p></td>
2417
- </tr>
2418
- </table>`}
2419
- </div>`;
2420
- const close = document.createElement("button");
2421
- close.classList.add("pwa-prompt-close");
2422
- close.innerText = "x";
2423
- close.onclick = () => {
2424
- prompt.classList.add("exit");
2425
- backdrop.classList.add("exit");
2426
- localStorage.setItem(`${this.api.options.name}:pwa`, "dismissed");
2427
- setTimeout(() => {
2428
- prompt.remove();
2429
- backdrop.remove();
2430
- }, 500);
2519
+ `;
2520
+ const closeBtn = prompt.querySelector(".pwa-prompt-close");
2521
+ const dismissExpiry = ((_a = this.api.options.pwaSettings) == null ? void 0 : _a.dismissExpiry) ?? 7;
2522
+ closeBtn.onclick = () => {
2523
+ dismissExpiry > 0 ? localStorage.setItem(`${this.api.options.name}:pwa`, (/* @__PURE__ */ new Date()).toISOString()) : localStorage.removeItem(`${this.api.options.name}:pwa`);
2524
+ prompt.remove();
2431
2525
  };
2432
- prompt.append(close);
2433
- backdrop.append(prompt);
2434
- document.body.append(backdrop);
2435
- if (this.deferredPrompt) {
2436
- const installBtn = prompt.querySelector("#installPwaBtn");
2437
- if (installBtn) {
2438
- installBtn.onclick = async () => {
2439
- this.deferredPrompt.prompt();
2440
- const choice = await this.deferredPrompt.userChoice;
2441
- if (choice.outcome === "accepted") console.log("PWA installed");
2442
- this.deferredPrompt = null;
2443
- close.click();
2444
- };
2445
- }
2446
- }
2526
+ document.body.append(prompt);
2527
+ if (this.deferredPrompt) this.bindInstallButton();
2447
2528
  }
2448
2529
  }
2449
2530
  class Files {
@@ -3369,7 +3450,7 @@ class Superuser {
3369
3450
  } });
3370
3451
  }
3371
3452
  }
3372
- const version = "1.2.92";
3453
+ const version = "1.3.1";
3373
3454
  class WebRtc {
3374
3455
  constructor(api) {
3375
3456
  __publicField(this, "ice");
@@ -1,4 +1,4 @@
1
- import { Api } from './api';
1
+ import { Api, ApiOptions } from './api';
2
2
  /** Styling options for login prompt */
3
3
  export type LoginPromptOptions = {
4
4
  /** Add links to top of page */
@@ -18,6 +18,11 @@ export type LoginPromptOptions = {
18
18
  hideApps?: boolean;
19
19
  /** Logo URL */
20
20
  logo?: string;
21
+ /** Logo Position */
22
+ /** 'left' | 'right' | 'aboveTitle' | 'belowTitle' | 'belowSubtitle' */
23
+ logoPosition?: 'left' | 'right' | 'aboveTitle' | 'belowTitle' | 'belowSubtitle';
24
+ /** Hide Logo regardless of existing Logo Url */
25
+ hideLogo?: boolean;
21
26
  /** Allow users to stay logged in */
22
27
  persist?: boolean;
23
28
  /** Header string or HTML: <img alt="logo" src="...">*/
@@ -44,6 +49,8 @@ export type LoginPromptOptions = {
44
49
  subtitleFontSize?: string;
45
50
  /** Text shadow for subtitle */
46
51
  subtitleTextShadow?: string;
52
+ platform?: 'android' | 'ios' | 'mac' | 'windows' | 'linux' | 'unknown';
53
+ pwaSettings?: ApiOptions["pwaSettings"];
47
54
  };
48
55
  /** Create a login prompt */
49
56
  export declare class LoginPrompt {
@@ -1 +1 @@
1
- {"version":3,"file":"login-prompt.d.ts","sourceRoot":"","sources":["../src/login-prompt.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,GAAG,EAAC,MAAM,OAAO,CAAC;AAG1B,uCAAuC;AACvC,MAAM,MAAM,kBAAkB,GAAG;IAChC,+BAA+B;IAC/B,QAAQ,CAAC,EAAE;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAC,EAAE,CAAC;IACzC,2BAA2B;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qBAAqB;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,eAAe;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4BAA4B;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iCAAiC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0BAA0B;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gCAAgC;IAChC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oBAAoB;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iCAAiC;IACjC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,yBAAyB;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,6BAA6B;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,+BAA+B;IAC/B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAA;AAED,4BAA4B;AAC5B,qBAAa,WAAW;IAwPX,OAAO,CAAC,QAAQ,CAAC,GAAG;aAAuB,KAAK,EAAE,MAAM;IAAS,OAAO,EAAE,kBAAkB;IAvPxG,mCAAmC;IACnC,OAAO,CAAC,MAAM,CAAC,GAAG,CA0KR;IAEV,8BAA8B;IAC9B,OAAO,CAAC,MAAM,CAAC,QAAQ,CA4DrB;IAEF,OAAO,CAAC,KAAK,CAAO;IACpB,OAAO,CAAC,MAAM,CAAO;IACrB,OAAO,CAAC,IAAI,CAAO;IACnB,OAAO,CAAC,QAAQ,CAAO;IACvB,OAAO,CAAC,OAAO,CAAO;IACtB,OAAO,CAAC,QAAQ,CAAO;IAEvB,OAAO,CAAC,KAAK,CAAY;IACzB,oDAAoD;IACpD,IAAI,gBAAmD;gBAE1B,GAAG,EAAE,GAAG,EAAkB,KAAK,EAAE,MAAM,EAAS,OAAO,GAAE,kBAAuB;YAI/F,MAAM;YAkBN,aAAa;IAS3B,6BAA6B;IAC7B,KAAK;IAKL,0CAA0C;IAC1C,MAAM;IAIN,8BAA8B;IAC9B,KAAK,CAAC,KAAK,EAAE,GAAG;CA4BhB"}
1
+ {"version":3,"file":"login-prompt.d.ts","sourceRoot":"","sources":["../src/login-prompt.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,GAAG,EAAE,UAAU,EAAC,MAAM,OAAO,CAAC;AAGtC,uCAAuC;AACvC,MAAM,MAAM,kBAAkB,GAAG;IAChC,+BAA+B;IAC/B,QAAQ,CAAC,EAAE;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAC,EAAE,CAAC;IACzC,2BAA2B;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qBAAqB;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,eAAe;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oBAAoB;IACpB,wEAAwE;IACxE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,YAAY,GAAG,YAAY,GAAG,eAAe,CAAC;IAChF,gDAAgD;IAChD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,oCAAoC;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4BAA4B;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iCAAiC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0BAA0B;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gCAAgC;IAChC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oBAAoB;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iCAAiC;IACjC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,yBAAyB;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,6BAA6B;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,+BAA+B;IAC/B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,EAAE,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IACvE,WAAW,CAAC,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC;CACxC,CAAA;AAED,4BAA4B;AAC5B,qBAAa,WAAW;IAoRX,OAAO,CAAC,QAAQ,CAAC,GAAG;aAAuB,KAAK,EAAE,MAAM;IAAS,OAAO,EAAE,kBAAkB;IAnRxG,mCAAmC;IACnC,OAAO,CAAC,MAAM,CAAC,GAAG,CAoLR;IAEV,8BAA8B;IAC9B,OAAO,CAAC,MAAM,CAAC,QAAQ,CA8ErB;IAEF,OAAO,CAAC,KAAK,CAAO;IACpB,OAAO,CAAC,MAAM,CAAO;IACrB,OAAO,CAAC,IAAI,CAAO;IACnB,OAAO,CAAC,QAAQ,CAAO;IACvB,OAAO,CAAC,OAAO,CAAO;IACtB,OAAO,CAAC,QAAQ,CAAO;IAEvB,OAAO,CAAC,KAAK,CAAY;IACzB,oDAAoD;IACpD,IAAI,gBAAmD;gBAE1B,GAAG,EAAE,GAAG,EAAkB,KAAK,EAAE,MAAM,EAAS,OAAO,GAAE,kBAAuB;YAI/F,MAAM;YAmCN,aAAa;IAgB3B,6BAA6B;IAC7B,KAAK;IAKL,0CAA0C;IAC1C,MAAM;IAIN,8BAA8B;IAC9B,KAAK,CAAC,KAAK,EAAE,GAAG;CA4BhB"}
package/dist/pwa.d.ts CHANGED
@@ -1,12 +1,13 @@
1
1
  import { Api } from './api';
2
2
  export declare class PWA {
3
3
  private readonly api;
4
- private deferredPrompt;
4
+ deferredPrompt: any;
5
5
  get iframe(): boolean;
6
6
  get mobile(): boolean;
7
7
  get platform(): 'android' | 'ios' | 'mac' | 'windows' | 'linux' | 'unknown';
8
8
  get pwa(): boolean;
9
9
  constructor(api: Api);
10
+ private bindInstallButton;
10
11
  /** Setup the PWA */
11
12
  setup(manifest?: any): Promise<void>;
12
13
  /** Prompt user to install the app */
package/dist/pwa.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"pwa.d.ts","sourceRoot":"","sources":["../src/pwa.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAC,MAAM,OAAO,CAAC;AAE1B,qBAAa,GAAG;IAqBH,OAAO,CAAC,QAAQ,CAAC,GAAG;IApBhC,OAAO,CAAC,cAAc,CAAa;IAEnC,IAAI,MAAM,IAAI,OAAO,CAAyC;IAE9D,IAAI,MAAM,IAAI,OAAO,CAAuD;IAE5E,IAAI,QAAQ,IAAI,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAQ1E;IAED,IAAI,GAAG,IAAI,OAAO,CAEjB;gBAE4B,GAAG,EAAE,GAAG;IAQrC,oBAAoB;IACd,KAAK,CAAC,QAAQ,GAAE,GAAQ;IAsC9B,qCAAqC;IAC/B,MAAM,CAAC,QAAQ,CAAC,EAAE,SAAS,GAAG,KAAK;CAiJzC"}
1
+ {"version":3,"file":"pwa.d.ts","sourceRoot":"","sources":["../src/pwa.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAC,MAAM,OAAO,CAAC;AAE1B,qBAAa,GAAG;IAqBH,OAAO,CAAC,QAAQ,CAAC,GAAG;IApBzB,cAAc,EAAE,GAAG,CAAQ;IAElC,IAAI,MAAM,IAAI,OAAO,CAAyC;IAE9D,IAAI,MAAM,IAAI,OAAO,CAAuD;IAE5E,IAAI,QAAQ,IAAI,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAQ1E;IAED,IAAI,GAAG,IAAI,OAAO,CAEjB;gBAE4B,GAAG,EAAE,GAAG;IAErC,OAAO,CAAC,iBAAiB;IAezB,oBAAoB;IACd,KAAK,CAAC,QAAQ,GAAE,GAAQ;IAmE9B,qCAAqC;IAC/B,MAAM,CAAC,QAAQ,CAAC,EAAE,SAAS,GAAG,KAAK;CAgJzC"}
@@ -5,22 +5,16 @@ self.addEventListener("fetch", (event) => {
5
5
  if (navigator.onLine) {
6
6
  event.respondWith(
7
7
  fetch(request).then((response) => {
8
- if (response && response.status === 200 && (request.url.startsWith(self.location.origin) || request.url.startsWith("https://datalynk-client"))) {
9
- const responseClone = response.clone();
10
- caches.open(cache).then((cache2) => cache2.put(request, responseClone));
11
- }
8
+ if ((response == null ? void 0 : response.status) === 200 && (request == null ? void 0 : request.method) === "GET")
9
+ caches.open(cache).then((cache2) => cache2.put(request, response.clone()));
12
10
  return response;
13
11
  }).catch(() => {
14
- return caches.match(request).then(
15
- (cachedResponse) => cachedResponse || new Response("You are offline", { status: 503, statusText: "Service Unavailable" })
16
- );
12
+ return caches.match(request).then((cachedResponse) => cachedResponse || new Response("You are offline", { status: 503, statusText: "Service Unavailable" }));
17
13
  })
18
14
  );
19
15
  } else {
20
16
  event.respondWith(
21
- caches.match(request).then(
22
- (cachedResponse) => cachedResponse || new Response("You are offline", { status: 503, statusText: "Service Unavailable" })
23
- )
17
+ caches.match(request).then((cachedResponse) => cachedResponse || new Response("You are offline", { status: 503, statusText: "Service Unavailable" }))
24
18
  );
25
19
  }
26
20
  });
@@ -4,22 +4,16 @@ self.addEventListener("fetch", (event) => {
4
4
  if (navigator.onLine) {
5
5
  event.respondWith(
6
6
  fetch(request).then((response) => {
7
- if (response && response.status === 200 && (request.url.startsWith(self.location.origin) || request.url.startsWith("https://datalynk-client"))) {
8
- const responseClone = response.clone();
9
- caches.open(cache).then((cache2) => cache2.put(request, responseClone));
10
- }
7
+ if ((response == null ? void 0 : response.status) === 200 && (request == null ? void 0 : request.method) === "GET")
8
+ caches.open(cache).then((cache2) => cache2.put(request, response.clone()));
11
9
  return response;
12
10
  }).catch(() => {
13
- return caches.match(request).then(
14
- (cachedResponse) => cachedResponse || new Response("You are offline", { status: 503, statusText: "Service Unavailable" })
15
- );
11
+ return caches.match(request).then((cachedResponse) => cachedResponse || new Response("You are offline", { status: 503, statusText: "Service Unavailable" }));
16
12
  })
17
13
  );
18
14
  } else {
19
15
  event.respondWith(
20
- caches.match(request).then(
21
- (cachedResponse) => cachedResponse || new Response("You are offline", { status: 503, statusText: "Service Unavailable" })
22
- )
16
+ caches.match(request).then((cachedResponse) => cachedResponse || new Response("You are offline", { status: 503, statusText: "Service Unavailable" }))
23
17
  );
24
18
  }
25
19
  });
package/dist/themes.d.ts CHANGED
@@ -16,6 +16,10 @@ export interface Theme {
16
16
  hideApps?: boolean;
17
17
  /** Logo URL */
18
18
  logo?: string;
19
+ /** Logo Position */
20
+ logoPosition?: 'left' | 'right' | 'aboveTitle' | 'belowTitle' | 'belowSubtitle';
21
+ /** Hide Logo regardless of existing Logo Url */
22
+ hideLogo?: boolean;
19
23
  /** Allow users to stay logged in */
20
24
  persist?: boolean;
21
25
  /** Header string or HTML: <img alt="logo" src="...">*/
@@ -1 +1 @@
1
- {"version":3,"file":"themes.d.ts","sourceRoot":"","sources":["../src/themes.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,KAAK;IACrB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC3C,2BAA2B;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2DAA2D;IAC3D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qBAAqB;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,eAAe;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4BAA4B;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iCAAiC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8BAA8B;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gCAAgC;IAChC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oBAAoB;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,mCAAmC;IACnC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,yBAAyB;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,6BAA6B;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,+BAA+B;IAC/B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;GAKG;AACH,wBAAsB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG;IAAC,KAAK,EAAE,OAAO,CAAA;CAAC,CAAC,CA2B/F"}
1
+ {"version":3,"file":"themes.d.ts","sourceRoot":"","sources":["../src/themes.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,KAAK;IACrB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC3C,2BAA2B;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2DAA2D;IAC3D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qBAAqB;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,eAAe;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oBAAoB;IACpB,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,YAAY,GAAG,YAAY,GAAG,eAAe,CAAC;IAChF,gDAAgD;IAChD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,oCAAoC;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4BAA4B;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iCAAiC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8BAA8B;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gCAAgC;IAChC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oBAAoB;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,mCAAmC;IACnC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,yBAAyB;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,6BAA6B;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,+BAA+B;IAC/B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;GAKG;AACH,wBAAsB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG;IAAC,KAAK,EAAE,OAAO,CAAA;CAAC,CAAC,CA6B/F"}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@auxilium/datalynk-client",
3
3
  "description": "Datalynk client library",
4
4
  "repository": "https://gitlab.auxiliumgroup.com/auxilium/datalynk/datalynk-client",
5
- "version": "1.2.92",
5
+ "version": "1.3.1",
6
6
  "author": "Zak Timson <zaktimson@gmail.com>",
7
7
  "private": false,
8
8
  "main": "./dist/index.cjs",