diff --git a/_dummy.EMaMnWE_.js b/_dummy.EMaMnWE_.js deleted file mode 100644 index 545a817..0000000 --- a/_dummy.EMaMnWE_.js +++ /dev/null @@ -1,2760 +0,0 @@ -import { C as CONFIG } from './assets/config-Bk6KWWaJ.js'; - -// @ts-ignore -try { - self['workbox:core:7.2.0'] && _(); -} -catch (e) { } - -const logger = null ; - -const fallback = (code, ...args) => { - let msg = code; - if (args.length > 0) { - msg += ` :: ${JSON.stringify(args)}`; - } - return msg; -}; -const messageGenerator = fallback ; - -/* - Copyright 2018 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. -*/ -/** - * Workbox errors should be thrown with this class. - * This allows use to ensure the type easily in tests, - * helps developers identify errors from workbox - * easily and allows use to optimise error - * messages correctly. - * - * @private - */ -class WorkboxError extends Error { - /** - * - * @param {string} errorCode The error code that - * identifies this particular error. - * @param {Object=} details Any relevant arguments - * that will help developers identify issues should - * be added as a key on the context object. - */ - constructor(errorCode, details) { - const message = messageGenerator(errorCode, details); - super(message); - this.name = errorCode; - this.details = details; - } -} - -/* - Copyright 2018 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. -*/ -// Callbacks to be executed whenever there's a quota error. -// Can't change Function type right now. -// eslint-disable-next-line @typescript-eslint/ban-types -const quotaErrorCallbacks = new Set(); - -function registerQuotaErrorCallback(callback) { - quotaErrorCallbacks.add(callback); -} - -/* - Copyright 2018 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. -*/ -const _cacheNameDetails = { - googleAnalytics: 'googleAnalytics', - precache: 'precache-v2', - prefix: 'workbox', - runtime: 'runtime', - suffix: typeof registration !== 'undefined' ? registration.scope : '', -}; -const _createCacheName = (cacheName) => { - return [_cacheNameDetails.prefix, cacheName, _cacheNameDetails.suffix] - .filter((value) => value && value.length > 0) - .join('-'); -}; -const eachCacheNameDetail = (fn) => { - for (const key of Object.keys(_cacheNameDetails)) { - fn(key); - } -}; -const cacheNames = { - updateDetails: (details) => { - eachCacheNameDetail((key) => { - if (typeof details[key] === 'string') { - _cacheNameDetails[key] = details[key]; - } - }); - }, - getGoogleAnalyticsName: (userCacheName) => { - return userCacheName || _createCacheName(_cacheNameDetails.googleAnalytics); - }, - getPrecacheName: (userCacheName) => { - return userCacheName || _createCacheName(_cacheNameDetails.precache); - }, - getPrefix: () => { - return _cacheNameDetails.prefix; - }, - getRuntimeName: (userCacheName) => { - return userCacheName || _createCacheName(_cacheNameDetails.runtime); - }, - getSuffix: () => { - return _cacheNameDetails.suffix; - }, -}; - -/* - Copyright 2020 Google LLC - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. -*/ -function stripParams(fullURL, ignoreParams) { - const strippedURL = new URL(fullURL); - for (const param of ignoreParams) { - strippedURL.searchParams.delete(param); - } - return strippedURL.href; -} -/** - * Matches an item in the cache, ignoring specific URL params. This is similar - * to the `ignoreSearch` option, but it allows you to ignore just specific - * params (while continuing to match on the others). - * - * @private - * @param {Cache} cache - * @param {Request} request - * @param {Object} matchOptions - * @param {Array} ignoreParams - * @return {Promise} - */ -async function cacheMatchIgnoreParams(cache, request, ignoreParams, matchOptions) { - const strippedRequestURL = stripParams(request.url, ignoreParams); - // If the request doesn't include any ignored params, match as normal. - if (request.url === strippedRequestURL) { - return cache.match(request, matchOptions); - } - // Otherwise, match by comparing keys - const keysOptions = Object.assign(Object.assign({}, matchOptions), { ignoreSearch: true }); - const cacheKeys = await cache.keys(request, keysOptions); - for (const cacheKey of cacheKeys) { - const strippedCacheKeyURL = stripParams(cacheKey.url, ignoreParams); - if (strippedRequestURL === strippedCacheKeyURL) { - return cache.match(cacheKey, matchOptions); - } - } - return; -} - -/* - Copyright 2019 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. -*/ -let supportStatus; -/** - * A utility function that determines whether the current browser supports - * constructing a new `Response` from a `response.body` stream. - * - * @return {boolean} `true`, if the current browser can successfully - * construct a `Response` from a `response.body` stream, `false` otherwise. - * - * @private - */ -function canConstructResponseFromBodyStream() { - if (supportStatus === undefined) { - const testResponse = new Response(''); - if ('body' in testResponse) { - try { - new Response(testResponse.body); - supportStatus = true; - } - catch (error) { - supportStatus = false; - } - } - supportStatus = false; - } - return supportStatus; -} - -/* - Copyright 2019 Google LLC - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. -*/ -/** - * A helper function that prevents a promise from being flagged as unused. - * - * @private - **/ -function dontWaitFor(promise) { - // Effective no-op. - void promise.then(() => { }); -} - -/* - Copyright 2018 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. -*/ -/** - * The Deferred class composes Promises in a way that allows for them to be - * resolved or rejected from outside the constructor. In most cases promises - * should be used directly, but Deferreds can be necessary when the logic to - * resolve a promise must be separate. - * - * @private - */ -class Deferred { - /** - * Creates a promise and exposes its resolve and reject functions as methods. - */ - constructor() { - this.promise = new Promise((resolve, reject) => { - this.resolve = resolve; - this.reject = reject; - }); - } -} - -async function executeQuotaErrorCallbacks() { - for (const callback of quotaErrorCallbacks) { - await callback(); - } -} - -/* - Copyright 2018 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. -*/ -const getFriendlyURL = (url) => { - const urlObj = new URL(String(url), location.href); - // See https://github.com/GoogleChrome/workbox/issues/2323 - // We want to include everything, except for the origin if it's same-origin. - return urlObj.href.replace(new RegExp(`^${location.origin}`), ''); -}; - -/* - Copyright 2019 Google LLC - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. -*/ -/** - * Returns a promise that resolves and the passed number of milliseconds. - * This utility is an async/await-friendly version of `setTimeout`. - * - * @param {number} ms - * @return {Promise} - * @private - */ -function timeout(ms) { - return new Promise((resolve) => setTimeout(resolve, ms)); -} - -/* - Copyright 2020 Google LLC - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. -*/ -/** - * A utility method that makes it easier to use `event.waitUntil` with - * async functions and return the result. - * - * @param {ExtendableEvent} event - * @param {Function} asyncFn - * @return {Function} - * @private - */ -function waitUntil(event, asyncFn) { - const returnPromise = asyncFn(); - event.waitUntil(returnPromise); - return returnPromise; -} - -/* - Copyright 2019 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. -*/ -/** - * Allows developers to copy a response and modify its `headers`, `status`, - * or `statusText` values (the values settable via a - * [`ResponseInit`]{@link https://developer.mozilla.org/en-US/docs/Web/API/Response/Response#Syntax} - * object in the constructor). - * To modify these values, pass a function as the second argument. That - * function will be invoked with a single object with the response properties - * `{headers, status, statusText}`. The return value of this function will - * be used as the `ResponseInit` for the new `Response`. To change the values - * either modify the passed parameter(s) and return it, or return a totally - * new object. - * - * This method is intentionally limited to same-origin responses, regardless of - * whether CORS was used or not. - * - * @param {Response} response - * @param {Function} modifier - * @memberof workbox-core - */ -async function copyResponse(response, modifier) { - let origin = null; - // If response.url isn't set, assume it's cross-origin and keep origin null. - if (response.url) { - const responseURL = new URL(response.url); - origin = responseURL.origin; - } - if (origin !== self.location.origin) { - throw new WorkboxError('cross-origin-copy-response', { origin }); - } - const clonedResponse = response.clone(); - // Create a fresh `ResponseInit` object by cloning the headers. - const responseInit = { - headers: new Headers(clonedResponse.headers), - status: clonedResponse.status, - statusText: clonedResponse.statusText, - }; - // Apply any user modifications. - const modifiedResponseInit = responseInit; - // Create the new response from the body stream and `ResponseInit` - // modifications. Note: not all browsers support the Response.body stream, - // so fall back to reading the entire body into memory as a blob. - const body = canConstructResponseFromBodyStream() - ? clonedResponse.body - : await clonedResponse.blob(); - return new Response(body, modifiedResponseInit); -} - -/* - Copyright 2019 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. -*/ -/** - * Claim any currently available clients once the service worker - * becomes active. This is normally used in conjunction with `skipWaiting()`. - * - * @memberof workbox-core - */ -function clientsClaim() { - self.addEventListener('activate', () => self.clients.claim()); -} - -// @ts-ignore -try { - self['workbox:routing:7.2.0'] && _(); -} -catch (e) { } - -/* - Copyright 2018 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. -*/ -/** - * The default HTTP method, 'GET', used when there's no specific method - * configured for a route. - * - * @type {string} - * - * @private - */ -const defaultMethod = 'GET'; - -const normalizeHandler = (handler) => { - if (handler && typeof handler === "object") { - return handler; - } else { - return { handle: handler }; - } -}; - -class Route { - /** - * Constructor for Route class. - * - * @param {workbox-routing~matchCallback} match - * A callback function that determines whether the route matches a given - * `fetch` event by returning a non-falsy value. - * @param {workbox-routing~handlerCallback} handler A callback - * function that returns a Promise resolving to a Response. - * @param {string} [method='GET'] The HTTP method to match the Route - * against. - */ - constructor(match, handler, method = defaultMethod) { - this.handler = normalizeHandler(handler); - this.match = match; - this.method = method; - } - /** - * - * @param {workbox-routing-handlerCallback} handler A callback - * function that returns a Promise resolving to a Response - */ - setCatchHandler(handler) { - this.catchHandler = normalizeHandler(handler); - } -} - -class RegExpRoute extends Route { - /** - * If the regular expression contains - * [capture groups]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#grouping-back-references}, - * the captured values will be passed to the - * {@link workbox-routing~handlerCallback} `params` - * argument. - * - * @param {RegExp} regExp The regular expression to match against URLs. - * @param {workbox-routing~handlerCallback} handler A callback - * function that returns a Promise resulting in a Response. - * @param {string} [method='GET'] The HTTP method to match the Route - * against. - */ - constructor(regExp, handler, method) { - const match = ({ url }) => { - const result = regExp.exec(url.href); - if (!result) { - return; - } - if (url.origin !== location.origin && result.index !== 0) { - return; - } - return result.slice(1); - }; - super(match, handler, method); - } -} - -class Router { - /** - * Initializes a new Router. - */ - constructor() { - this._routes = /* @__PURE__ */ new Map(); - this._defaultHandlerMap = /* @__PURE__ */ new Map(); - } - /** - * @return {Map>} routes A `Map` of HTTP - * method name ('GET', etc.) to an array of all the corresponding `Route` - * instances that are registered. - */ - get routes() { - return this._routes; - } - /** - * Adds a fetch event listener to respond to events when a route matches - * the event's request. - */ - addFetchListener() { - self.addEventListener("fetch", (event) => { - const { request } = event; - const responsePromise = this.handleRequest({ request, event }); - if (responsePromise) { - event.respondWith(responsePromise); - } - }); - } - /** - * Adds a message event listener for URLs to cache from the window. - * This is useful to cache resources loaded on the page prior to when the - * service worker started controlling it. - * - * The format of the message data sent from the window should be as follows. - * Where the `urlsToCache` array may consist of URL strings or an array of - * URL string + `requestInit` object (the same as you'd pass to `fetch()`). - * - * ``` - * { - * type: 'CACHE_URLS', - * payload: { - * urlsToCache: [ - * './script1.js', - * './script2.js', - * ['./script3.js', {mode: 'no-cors'}], - * ], - * }, - * } - * ``` - */ - addCacheListener() { - self.addEventListener("message", (event) => { - if (event.data && event.data.type === "CACHE_URLS") { - const { payload } = event.data; - const requestPromises = Promise.all(payload.urlsToCache.map((entry) => { - if (typeof entry === "string") { - entry = [entry]; - } - const request = new Request(...entry); - return this.handleRequest({ request, event }); - })); - event.waitUntil(requestPromises); - if (event.ports && event.ports[0]) { - void requestPromises.then(() => event.ports[0].postMessage(true)); - } - } - }); - } - /** - * Apply the routing rules to a FetchEvent object to get a Response from an - * appropriate Route's handler. - * - * @param {Object} options - * @param {Request} options.request The request to handle. - * @param {ExtendableEvent} options.event The event that triggered the - * request. - * @return {Promise|undefined} A promise is returned if a - * registered route can handle the request. If there is no matching - * route and there's no `defaultHandler`, `undefined` is returned. - */ - handleRequest({ request, event }) { - const url = new URL(request.url, location.href); - if (!url.protocol.startsWith("http")) { - return; - } - const sameOrigin = url.origin === location.origin; - const { params, route } = this.findMatchingRoute({ - event, - request, - sameOrigin, - url - }); - let handler = route && route.handler; - const method = request.method; - if (!handler && this._defaultHandlerMap.has(method)) { - handler = this._defaultHandlerMap.get(method); - } - if (!handler) { - return; - } - let responsePromise; - try { - responsePromise = handler.handle({ url, request, event, params }); - } catch (err) { - responsePromise = Promise.reject(err); - } - const catchHandler = route && route.catchHandler; - if (responsePromise instanceof Promise && (this._catchHandler || catchHandler)) { - responsePromise = responsePromise.catch(async (err) => { - if (catchHandler) { - try { - return await catchHandler.handle({ url, request, event, params }); - } catch (catchErr) { - if (catchErr instanceof Error) { - err = catchErr; - } - } - } - if (this._catchHandler) { - return this._catchHandler.handle({ url, request, event }); - } - throw err; - }); - } - return responsePromise; - } - /** - * Checks a request and URL (and optionally an event) against the list of - * registered routes, and if there's a match, returns the corresponding - * route along with any params generated by the match. - * - * @param {Object} options - * @param {URL} options.url - * @param {boolean} options.sameOrigin The result of comparing `url.origin` - * against the current origin. - * @param {Request} options.request The request to match. - * @param {Event} options.event The corresponding event. - * @return {Object} An object with `route` and `params` properties. - * They are populated if a matching route was found or `undefined` - * otherwise. - */ - findMatchingRoute({ url, sameOrigin, request, event }) { - const routes = this._routes.get(request.method) || []; - for (const route of routes) { - let params; - const matchResult = route.match({ url, sameOrigin, request, event }); - if (matchResult) { - params = matchResult; - if (Array.isArray(params) && params.length === 0) { - params = void 0; - } else if (matchResult.constructor === Object && // eslint-disable-line - Object.keys(matchResult).length === 0) { - params = void 0; - } else if (typeof matchResult === "boolean") { - params = void 0; - } - return { route, params }; - } - } - return {}; - } - /** - * Define a default `handler` that's called when no routes explicitly - * match the incoming request. - * - * Each HTTP method ('GET', 'POST', etc.) gets its own default handler. - * - * Without a default handler, unmatched requests will go against the - * network as if there were no service worker present. - * - * @param {workbox-routing~handlerCallback} handler A callback - * function that returns a Promise resulting in a Response. - * @param {string} [method='GET'] The HTTP method to associate with this - * default handler. Each method has its own default. - */ - setDefaultHandler(handler, method = defaultMethod) { - this._defaultHandlerMap.set(method, normalizeHandler(handler)); - } - /** - * If a Route throws an error while handling a request, this `handler` - * will be called and given a chance to provide a response. - * - * @param {workbox-routing~handlerCallback} handler A callback - * function that returns a Promise resulting in a Response. - */ - setCatchHandler(handler) { - this._catchHandler = normalizeHandler(handler); - } - /** - * Registers a route with the router. - * - * @param {workbox-routing.Route} route The route to register. - */ - registerRoute(route) { - if (!this._routes.has(route.method)) { - this._routes.set(route.method, []); - } - this._routes.get(route.method).push(route); - } - /** - * Unregisters a route with the router. - * - * @param {workbox-routing.Route} route The route to unregister. - */ - unregisterRoute(route) { - if (!this._routes.has(route.method)) { - throw new WorkboxError("unregister-route-but-not-found-with-method", { - method: route.method - }); - } - const routeIndex = this._routes.get(route.method).indexOf(route); - if (routeIndex > -1) { - this._routes.get(route.method).splice(routeIndex, 1); - } else { - throw new WorkboxError("unregister-route-route-not-registered"); - } - } -} - -/* - Copyright 2019 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. -*/ -let defaultRouter; -/** - * Creates a new, singleton Router instance if one does not exist. If one - * does already exist, that instance is returned. - * - * @private - * @return {Router} - */ -const getOrCreateDefaultRouter = () => { - if (!defaultRouter) { - defaultRouter = new Router(); - // The helpers that use the default Router assume these listeners exist. - defaultRouter.addFetchListener(); - defaultRouter.addCacheListener(); - } - return defaultRouter; -}; - -function registerRoute(capture, handler, method) { - let route; - if (typeof capture === "string") { - const captureUrl = new URL(capture, location.href); - const matchCallback = ({ url }) => { - return url.href === captureUrl.href; - }; - route = new Route(matchCallback, handler, method); - } else if (capture instanceof RegExp) { - route = new RegExpRoute(capture, handler, method); - } else if (typeof capture === "function") { - route = new Route(capture, handler, method); - } else if (capture instanceof Route) { - route = capture; - } else { - throw new WorkboxError("unsupported-route-type", { - moduleName: "workbox-routing", - funcName: "registerRoute", - paramName: "capture" - }); - } - const defaultRouter = getOrCreateDefaultRouter(); - defaultRouter.registerRoute(route); - return route; -} - -// @ts-ignore -try { - self['workbox:strategies:7.2.0'] && _(); -} -catch (e) { } - -function toRequest(input) { - return typeof input === "string" ? new Request(input) : input; -} -class StrategyHandler { - /** - * Creates a new instance associated with the passed strategy and event - * that's handling the request. - * - * The constructor also initializes the state that will be passed to each of - * the plugins handling this request. - * - * @param {workbox-strategies.Strategy} strategy - * @param {Object} options - * @param {Request|string} options.request A request to run this strategy for. - * @param {ExtendableEvent} options.event The event associated with the - * request. - * @param {URL} [options.url] - * @param {*} [options.params] The return value from the - * {@link workbox-routing~matchCallback} (if applicable). - */ - constructor(strategy, options) { - this._cacheKeys = {}; - Object.assign(this, options); - this.event = options.event; - this._strategy = strategy; - this._handlerDeferred = new Deferred(); - this._extendLifetimePromises = []; - this._plugins = [...strategy.plugins]; - this._pluginStateMap = /* @__PURE__ */ new Map(); - for (const plugin of this._plugins) { - this._pluginStateMap.set(plugin, {}); - } - this.event.waitUntil(this._handlerDeferred.promise); - } - /** - * Fetches a given request (and invokes any applicable plugin callback - * methods) using the `fetchOptions` (for non-navigation requests) and - * `plugins` defined on the `Strategy` object. - * - * The following plugin lifecycle methods are invoked when using this method: - * - `requestWillFetch()` - * - `fetchDidSucceed()` - * - `fetchDidFail()` - * - * @param {Request|string} input The URL or request to fetch. - * @return {Promise} - */ - async fetch(input) { - const { event } = this; - let request = toRequest(input); - if (request.mode === "navigate" && event instanceof FetchEvent && event.preloadResponse) { - const possiblePreloadResponse = await event.preloadResponse; - if (possiblePreloadResponse) { - return possiblePreloadResponse; - } - } - const originalRequest = this.hasCallback("fetchDidFail") ? request.clone() : null; - try { - for (const cb of this.iterateCallbacks("requestWillFetch")) { - request = await cb({ request: request.clone(), event }); - } - } catch (err) { - if (err instanceof Error) { - throw new WorkboxError("plugin-error-request-will-fetch", { - thrownErrorMessage: err.message - }); - } - } - const pluginFilteredRequest = request.clone(); - try { - let fetchResponse; - fetchResponse = await fetch(request, request.mode === "navigate" ? void 0 : this._strategy.fetchOptions); - if (false) ; - for (const callback of this.iterateCallbacks("fetchDidSucceed")) { - fetchResponse = await callback({ - event, - request: pluginFilteredRequest, - response: fetchResponse - }); - } - return fetchResponse; - } catch (error) { - if (originalRequest) { - await this.runCallbacks("fetchDidFail", { - error, - event, - originalRequest: originalRequest.clone(), - request: pluginFilteredRequest.clone() - }); - } - throw error; - } - } - /** - * Calls `this.fetch()` and (in the background) runs `this.cachePut()` on - * the response generated by `this.fetch()`. - * - * The call to `this.cachePut()` automatically invokes `this.waitUntil()`, - * so you do not have to manually call `waitUntil()` on the event. - * - * @param {Request|string} input The request or URL to fetch and cache. - * @return {Promise} - */ - async fetchAndCachePut(input) { - const response = await this.fetch(input); - const responseClone = response.clone(); - void this.waitUntil(this.cachePut(input, responseClone)); - return response; - } - /** - * Matches a request from the cache (and invokes any applicable plugin - * callback methods) using the `cacheName`, `matchOptions`, and `plugins` - * defined on the strategy object. - * - * The following plugin lifecycle methods are invoked when using this method: - * - cacheKeyWillBeUsed() - * - cachedResponseWillBeUsed() - * - * @param {Request|string} key The Request or URL to use as the cache key. - * @return {Promise} A matching response, if found. - */ - async cacheMatch(key) { - const request = toRequest(key); - let cachedResponse; - const { cacheName, matchOptions } = this._strategy; - const effectiveRequest = await this.getCacheKey(request, "read"); - const multiMatchOptions = Object.assign(Object.assign({}, matchOptions), { cacheName }); - cachedResponse = await caches.match(effectiveRequest, multiMatchOptions); - for (const callback of this.iterateCallbacks("cachedResponseWillBeUsed")) { - cachedResponse = await callback({ - cacheName, - matchOptions, - cachedResponse, - request: effectiveRequest, - event: this.event - }) || void 0; - } - return cachedResponse; - } - /** - * Puts a request/response pair in the cache (and invokes any applicable - * plugin callback methods) using the `cacheName` and `plugins` defined on - * the strategy object. - * - * The following plugin lifecycle methods are invoked when using this method: - * - cacheKeyWillBeUsed() - * - cacheWillUpdate() - * - cacheDidUpdate() - * - * @param {Request|string} key The request or URL to use as the cache key. - * @param {Response} response The response to cache. - * @return {Promise} `false` if a cacheWillUpdate caused the response - * not be cached, and `true` otherwise. - */ - async cachePut(key, response) { - const request = toRequest(key); - await timeout(0); - const effectiveRequest = await this.getCacheKey(request, "write"); - if (!response) { - throw new WorkboxError("cache-put-with-no-response", { - url: getFriendlyURL(effectiveRequest.url) - }); - } - const responseToCache = await this._ensureResponseSafeToCache(response); - if (!responseToCache) { - return false; - } - const { cacheName, matchOptions } = this._strategy; - const cache = await self.caches.open(cacheName); - const hasCacheUpdateCallback = this.hasCallback("cacheDidUpdate"); - const oldResponse = hasCacheUpdateCallback ? await cacheMatchIgnoreParams( - // TODO(philipwalton): the `__WB_REVISION__` param is a precaching - // feature. Consider into ways to only add this behavior if using - // precaching. - cache, - effectiveRequest.clone(), - ["__WB_REVISION__"], - matchOptions - ) : null; - try { - await cache.put(effectiveRequest, hasCacheUpdateCallback ? responseToCache.clone() : responseToCache); - } catch (error) { - if (error instanceof Error) { - if (error.name === "QuotaExceededError") { - await executeQuotaErrorCallbacks(); - } - throw error; - } - } - for (const callback of this.iterateCallbacks("cacheDidUpdate")) { - await callback({ - cacheName, - oldResponse, - newResponse: responseToCache.clone(), - request: effectiveRequest, - event: this.event - }); - } - return true; - } - /** - * Checks the list of plugins for the `cacheKeyWillBeUsed` callback, and - * executes any of those callbacks found in sequence. The final `Request` - * object returned by the last plugin is treated as the cache key for cache - * reads and/or writes. If no `cacheKeyWillBeUsed` plugin callbacks have - * been registered, the passed request is returned unmodified - * - * @param {Request} request - * @param {string} mode - * @return {Promise} - */ - async getCacheKey(request, mode) { - const key = `${request.url} | ${mode}`; - if (!this._cacheKeys[key]) { - let effectiveRequest = request; - for (const callback of this.iterateCallbacks("cacheKeyWillBeUsed")) { - effectiveRequest = toRequest(await callback({ - mode, - request: effectiveRequest, - event: this.event, - // params has a type any can't change right now. - params: this.params - // eslint-disable-line - })); - } - this._cacheKeys[key] = effectiveRequest; - } - return this._cacheKeys[key]; - } - /** - * Returns true if the strategy has at least one plugin with the given - * callback. - * - * @param {string} name The name of the callback to check for. - * @return {boolean} - */ - hasCallback(name) { - for (const plugin of this._strategy.plugins) { - if (name in plugin) { - return true; - } - } - return false; - } - /** - * Runs all plugin callbacks matching the given name, in order, passing the - * given param object (merged ith the current plugin state) as the only - * argument. - * - * Note: since this method runs all plugins, it's not suitable for cases - * where the return value of a callback needs to be applied prior to calling - * the next callback. See - * {@link workbox-strategies.StrategyHandler#iterateCallbacks} - * below for how to handle that case. - * - * @param {string} name The name of the callback to run within each plugin. - * @param {Object} param The object to pass as the first (and only) param - * when executing each callback. This object will be merged with the - * current plugin state prior to callback execution. - */ - async runCallbacks(name, param) { - for (const callback of this.iterateCallbacks(name)) { - await callback(param); - } - } - /** - * Accepts a callback and returns an iterable of matching plugin callbacks, - * where each callback is wrapped with the current handler state (i.e. when - * you call each callback, whatever object parameter you pass it will - * be merged with the plugin's current state). - * - * @param {string} name The name fo the callback to run - * @return {Array} - */ - *iterateCallbacks(name) { - for (const plugin of this._strategy.plugins) { - if (typeof plugin[name] === "function") { - const state = this._pluginStateMap.get(plugin); - const statefulCallback = (param) => { - const statefulParam = Object.assign(Object.assign({}, param), { state }); - return plugin[name](statefulParam); - }; - yield statefulCallback; - } - } - } - /** - * Adds a promise to the - * [extend lifetime promises]{@link https://w3c.github.io/ServiceWorker/#extendableevent-extend-lifetime-promises} - * of the event event associated with the request being handled (usually a - * `FetchEvent`). - * - * Note: you can await - * {@link workbox-strategies.StrategyHandler~doneWaiting} - * to know when all added promises have settled. - * - * @param {Promise} promise A promise to add to the extend lifetime promises - * of the event that triggered the request. - */ - waitUntil(promise) { - this._extendLifetimePromises.push(promise); - return promise; - } - /** - * Returns a promise that resolves once all promises passed to - * {@link workbox-strategies.StrategyHandler~waitUntil} - * have settled. - * - * Note: any work done after `doneWaiting()` settles should be manually - * passed to an event's `waitUntil()` method (not this handler's - * `waitUntil()` method), otherwise the service worker thread my be killed - * prior to your work completing. - */ - async doneWaiting() { - let promise; - while (promise = this._extendLifetimePromises.shift()) { - await promise; - } - } - /** - * Stops running the strategy and immediately resolves any pending - * `waitUntil()` promises. - */ - destroy() { - this._handlerDeferred.resolve(null); - } - /** - * This method will call cacheWillUpdate on the available plugins (or use - * status === 200) to determine if the Response is safe and valid to cache. - * - * @param {Request} options.request - * @param {Response} options.response - * @return {Promise} - * - * @private - */ - async _ensureResponseSafeToCache(response) { - let responseToCache = response; - let pluginsUsed = false; - for (const callback of this.iterateCallbacks("cacheWillUpdate")) { - responseToCache = await callback({ - request: this.request, - response: responseToCache, - event: this.event - }) || void 0; - pluginsUsed = true; - if (!responseToCache) { - break; - } - } - if (!pluginsUsed) { - if (responseToCache && responseToCache.status !== 200) { - responseToCache = void 0; - } - } - return responseToCache; - } -} - -class Strategy { - /** - * Creates a new instance of the strategy and sets all documented option - * properties as public instance properties. - * - * Note: if a custom strategy class extends the base Strategy class and does - * not need more than these properties, it does not need to define its own - * constructor. - * - * @param {Object} [options] - * @param {string} [options.cacheName] Cache name to store and retrieve - * requests. Defaults to the cache names provided by - * {@link workbox-core.cacheNames}. - * @param {Array} [options.plugins] [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins} - * to use in conjunction with this caching strategy. - * @param {Object} [options.fetchOptions] Values passed along to the - * [`init`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters) - * of [non-navigation](https://github.com/GoogleChrome/workbox/issues/1796) - * `fetch()` requests made by this strategy. - * @param {Object} [options.matchOptions] The - * [`CacheQueryOptions`]{@link https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions} - * for any `cache.match()` or `cache.put()` calls made by this strategy. - */ - constructor(options = {}) { - this.cacheName = cacheNames.getRuntimeName(options.cacheName); - this.plugins = options.plugins || []; - this.fetchOptions = options.fetchOptions; - this.matchOptions = options.matchOptions; - } - /** - * Perform a request strategy and returns a `Promise` that will resolve with - * a `Response`, invoking all relevant plugin callbacks. - * - * When a strategy instance is registered with a Workbox - * {@link workbox-routing.Route}, this method is automatically - * called when the route matches. - * - * Alternatively, this method can be used in a standalone `FetchEvent` - * listener by passing it to `event.respondWith()`. - * - * @param {FetchEvent|Object} options A `FetchEvent` or an object with the - * properties listed below. - * @param {Request|string} options.request A request to run this strategy for. - * @param {ExtendableEvent} options.event The event associated with the - * request. - * @param {URL} [options.url] - * @param {*} [options.params] - */ - handle(options) { - const [responseDone] = this.handleAll(options); - return responseDone; - } - /** - * Similar to {@link workbox-strategies.Strategy~handle}, but - * instead of just returning a `Promise` that resolves to a `Response` it - * it will return an tuple of `[response, done]` promises, where the former - * (`response`) is equivalent to what `handle()` returns, and the latter is a - * Promise that will resolve once any promises that were added to - * `event.waitUntil()` as part of performing the strategy have completed. - * - * You can await the `done` promise to ensure any extra work performed by - * the strategy (usually caching responses) completes successfully. - * - * @param {FetchEvent|Object} options A `FetchEvent` or an object with the - * properties listed below. - * @param {Request|string} options.request A request to run this strategy for. - * @param {ExtendableEvent} options.event The event associated with the - * request. - * @param {URL} [options.url] - * @param {*} [options.params] - * @return {Array} A tuple of [response, done] - * promises that can be used to determine when the response resolves as - * well as when the handler has completed all its work. - */ - handleAll(options) { - if (options instanceof FetchEvent) { - options = { - event: options, - request: options.request - }; - } - const event = options.event; - const request = typeof options.request === "string" ? new Request(options.request) : options.request; - const params = "params" in options ? options.params : void 0; - const handler = new StrategyHandler(this, { event, request, params }); - const responseDone = this._getResponse(handler, request, event); - const handlerDone = this._awaitComplete(responseDone, handler, request, event); - return [responseDone, handlerDone]; - } - async _getResponse(handler, request, event) { - await handler.runCallbacks("handlerWillStart", { event, request }); - let response = void 0; - try { - response = await this._handle(request, handler); - if (!response || response.type === "error") { - throw new WorkboxError("no-response", { url: request.url }); - } - } catch (error) { - if (error instanceof Error) { - for (const callback of handler.iterateCallbacks("handlerDidError")) { - response = await callback({ error, event, request }); - if (response) { - break; - } - } - } - if (!response) { - throw error; - } - } - for (const callback of handler.iterateCallbacks("handlerWillRespond")) { - response = await callback({ event, request, response }); - } - return response; - } - async _awaitComplete(responseDone, handler, request, event) { - let response; - let error; - try { - response = await responseDone; - } catch (error2) { - } - try { - await handler.runCallbacks("handlerDidRespond", { - event, - request, - response - }); - await handler.doneWaiting(); - } catch (waitUntilError) { - if (waitUntilError instanceof Error) { - error = waitUntilError; - } - } - await handler.runCallbacks("handlerDidComplete", { - event, - request, - response, - error - }); - handler.destroy(); - if (error) { - throw error; - } - } -} - -class CacheFirst extends Strategy { - /** - * @private - * @param {Request|string} request A request to run this strategy for. - * @param {workbox-strategies.StrategyHandler} handler The event that - * triggered the request. - * @return {Promise} - */ - async _handle(request, handler) { - let response = await handler.cacheMatch(request); - let error = void 0; - if (!response) { - try { - response = await handler.fetchAndCachePut(request); - } catch (err) { - if (err instanceof Error) { - error = err; - } - } - } - if (!response) { - throw new WorkboxError("no-response", { url: request.url, error }); - } - return response; - } -} - -/* - Copyright 2018 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. -*/ -const cacheOkAndOpaquePlugin = { - /** - * Returns a valid response (to allow caching) if the status is 200 (OK) or - * 0 (opaque). - * - * @param {Object} options - * @param {Response} options.response - * @return {Response|null} - * - * @private - */ - cacheWillUpdate: async ({ response }) => { - if (response.status === 200 || response.status === 0) { - return response; - } - return null; - }, -}; - -class StaleWhileRevalidate extends Strategy { - /** - * @param {Object} [options] - * @param {string} [options.cacheName] Cache name to store and retrieve - * requests. Defaults to cache names provided by - * {@link workbox-core.cacheNames}. - * @param {Array} [options.plugins] [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins} - * to use in conjunction with this caching strategy. - * @param {Object} [options.fetchOptions] Values passed along to the - * [`init`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters) - * of [non-navigation](https://github.com/GoogleChrome/workbox/issues/1796) - * `fetch()` requests made by this strategy. - * @param {Object} [options.matchOptions] [`CacheQueryOptions`](https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions) - */ - constructor(options = {}) { - super(options); - if (!this.plugins.some((p) => "cacheWillUpdate" in p)) { - this.plugins.unshift(cacheOkAndOpaquePlugin); - } - } - /** - * @private - * @param {Request|string} request A request to run this strategy for. - * @param {workbox-strategies.StrategyHandler} handler The event that - * triggered the request. - * @return {Promise} - */ - async _handle(request, handler) { - const fetchAndCachePromise = handler.fetchAndCachePut(request).catch(() => { - }); - void handler.waitUntil(fetchAndCachePromise); - let response = await handler.cacheMatch(request); - let error; - if (response) ; else { - try { - response = await fetchAndCachePromise; - } catch (err) { - if (err instanceof Error) { - error = err; - } - } - } - if (!response) { - throw new WorkboxError("no-response", { url: request.url, error }); - } - return response; - } -} - -function escapeRegExp(value) { - return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); -} - -const instanceOfAny = (object, constructors) => constructors.some((c) => object instanceof c); - -let idbProxyableTypes; -let cursorAdvanceMethods; -// This is a function to prevent it throwing up in node environments. -function getIdbProxyableTypes() { - return (idbProxyableTypes || - (idbProxyableTypes = [ - IDBDatabase, - IDBObjectStore, - IDBIndex, - IDBCursor, - IDBTransaction, - ])); -} -// This is a function to prevent it throwing up in node environments. -function getCursorAdvanceMethods() { - return (cursorAdvanceMethods || - (cursorAdvanceMethods = [ - IDBCursor.prototype.advance, - IDBCursor.prototype.continue, - IDBCursor.prototype.continuePrimaryKey, - ])); -} -const cursorRequestMap = new WeakMap(); -const transactionDoneMap = new WeakMap(); -const transactionStoreNamesMap = new WeakMap(); -const transformCache = new WeakMap(); -const reverseTransformCache = new WeakMap(); -function promisifyRequest(request) { - const promise = new Promise((resolve, reject) => { - const unlisten = () => { - request.removeEventListener('success', success); - request.removeEventListener('error', error); - }; - const success = () => { - resolve(wrap(request.result)); - unlisten(); - }; - const error = () => { - reject(request.error); - unlisten(); - }; - request.addEventListener('success', success); - request.addEventListener('error', error); - }); - promise - .then((value) => { - // Since cursoring reuses the IDBRequest (*sigh*), we cache it for later retrieval - // (see wrapFunction). - if (value instanceof IDBCursor) { - cursorRequestMap.set(value, request); - } - // Catching to avoid "Uncaught Promise exceptions" - }) - .catch(() => { }); - // This mapping exists in reverseTransformCache but doesn't doesn't exist in transformCache. This - // is because we create many promises from a single IDBRequest. - reverseTransformCache.set(promise, request); - return promise; -} -function cacheDonePromiseForTransaction(tx) { - // Early bail if we've already created a done promise for this transaction. - if (transactionDoneMap.has(tx)) - return; - const done = new Promise((resolve, reject) => { - const unlisten = () => { - tx.removeEventListener('complete', complete); - tx.removeEventListener('error', error); - tx.removeEventListener('abort', error); - }; - const complete = () => { - resolve(); - unlisten(); - }; - const error = () => { - reject(tx.error || new DOMException('AbortError', 'AbortError')); - unlisten(); - }; - tx.addEventListener('complete', complete); - tx.addEventListener('error', error); - tx.addEventListener('abort', error); - }); - // Cache it for later retrieval. - transactionDoneMap.set(tx, done); -} -let idbProxyTraps = { - get(target, prop, receiver) { - if (target instanceof IDBTransaction) { - // Special handling for transaction.done. - if (prop === 'done') - return transactionDoneMap.get(target); - // Polyfill for objectStoreNames because of Edge. - if (prop === 'objectStoreNames') { - return target.objectStoreNames || transactionStoreNamesMap.get(target); - } - // Make tx.store return the only store in the transaction, or undefined if there are many. - if (prop === 'store') { - return receiver.objectStoreNames[1] - ? undefined - : receiver.objectStore(receiver.objectStoreNames[0]); - } - } - // Else transform whatever we get back. - return wrap(target[prop]); - }, - set(target, prop, value) { - target[prop] = value; - return true; - }, - has(target, prop) { - if (target instanceof IDBTransaction && - (prop === 'done' || prop === 'store')) { - return true; - } - return prop in target; - }, -}; -function replaceTraps(callback) { - idbProxyTraps = callback(idbProxyTraps); -} -function wrapFunction(func) { - // Due to expected object equality (which is enforced by the caching in `wrap`), we - // only create one new func per func. - // Edge doesn't support objectStoreNames (booo), so we polyfill it here. - if (func === IDBDatabase.prototype.transaction && - !('objectStoreNames' in IDBTransaction.prototype)) { - return function (storeNames, ...args) { - const tx = func.call(unwrap(this), storeNames, ...args); - transactionStoreNamesMap.set(tx, storeNames.sort ? storeNames.sort() : [storeNames]); - return wrap(tx); - }; - } - // Cursor methods are special, as the behaviour is a little more different to standard IDB. In - // IDB, you advance the cursor and wait for a new 'success' on the IDBRequest that gave you the - // cursor. It's kinda like a promise that can resolve with many values. That doesn't make sense - // with real promises, so each advance methods returns a new promise for the cursor object, or - // undefined if the end of the cursor has been reached. - if (getCursorAdvanceMethods().includes(func)) { - return function (...args) { - // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use - // the original object. - func.apply(unwrap(this), args); - return wrap(cursorRequestMap.get(this)); - }; - } - return function (...args) { - // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use - // the original object. - return wrap(func.apply(unwrap(this), args)); - }; -} -function transformCachableValue(value) { - if (typeof value === 'function') - return wrapFunction(value); - // This doesn't return, it just creates a 'done' promise for the transaction, - // which is later returned for transaction.done (see idbObjectHandler). - if (value instanceof IDBTransaction) - cacheDonePromiseForTransaction(value); - if (instanceOfAny(value, getIdbProxyableTypes())) - return new Proxy(value, idbProxyTraps); - // Return the same value back if we're not going to transform it. - return value; -} -function wrap(value) { - // We sometimes generate multiple promises from a single IDBRequest (eg when cursoring), because - // IDB is weird and a single IDBRequest can yield many responses, so these can't be cached. - if (value instanceof IDBRequest) - return promisifyRequest(value); - // If we've already transformed this value before, reuse the transformed value. - // This is faster, but it also provides object equality. - if (transformCache.has(value)) - return transformCache.get(value); - const newValue = transformCachableValue(value); - // Not all types are transformed. - // These may be primitive types, so they can't be WeakMap keys. - if (newValue !== value) { - transformCache.set(value, newValue); - reverseTransformCache.set(newValue, value); - } - return newValue; -} -const unwrap = (value) => reverseTransformCache.get(value); - -/** - * Open a database. - * - * @param name Name of the database. - * @param version Schema version. - * @param callbacks Additional callbacks. - */ -function openDB(name, version, { blocked, upgrade, blocking, terminated } = {}) { - const request = indexedDB.open(name, version); - const openPromise = wrap(request); - if (upgrade) { - request.addEventListener('upgradeneeded', (event) => { - upgrade(wrap(request.result), event.oldVersion, event.newVersion, wrap(request.transaction), event); - }); - } - if (blocked) { - request.addEventListener('blocked', (event) => blocked( - // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405 - event.oldVersion, event.newVersion, event)); - } - openPromise - .then((db) => { - if (terminated) - db.addEventListener('close', () => terminated()); - if (blocking) { - db.addEventListener('versionchange', (event) => blocking(event.oldVersion, event.newVersion, event)); - } - }) - .catch(() => { }); - return openPromise; -} -/** - * Delete a database. - * - * @param name Name of the database. - */ -function deleteDB(name, { blocked } = {}) { - const request = indexedDB.deleteDatabase(name); - if (blocked) { - request.addEventListener('blocked', (event) => blocked( - // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405 - event.oldVersion, event)); - } - return wrap(request).then(() => undefined); -} - -const readMethods = ['get', 'getKey', 'getAll', 'getAllKeys', 'count']; -const writeMethods = ['put', 'add', 'delete', 'clear']; -const cachedMethods = new Map(); -function getMethod(target, prop) { - if (!(target instanceof IDBDatabase && - !(prop in target) && - typeof prop === 'string')) { - return; - } - if (cachedMethods.get(prop)) - return cachedMethods.get(prop); - const targetFuncName = prop.replace(/FromIndex$/, ''); - const useIndex = prop !== targetFuncName; - const isWrite = writeMethods.includes(targetFuncName); - if ( - // Bail if the target doesn't exist on the target. Eg, getAll isn't in Edge. - !(targetFuncName in (useIndex ? IDBIndex : IDBObjectStore).prototype) || - !(isWrite || readMethods.includes(targetFuncName))) { - return; - } - const method = async function (storeName, ...args) { - // isWrite ? 'readwrite' : undefined gzipps better, but fails in Edge :( - const tx = this.transaction(storeName, isWrite ? 'readwrite' : 'readonly'); - let target = tx.store; - if (useIndex) - target = target.index(args.shift()); - // Must reject if op rejects. - // If it's a write operation, must reject if tx.done rejects. - // Must reject with op rejection first. - // Must resolve with op value. - // Must handle both promises (no unhandled rejections) - return (await Promise.all([ - target[targetFuncName](...args), - isWrite && tx.done, - ]))[0]; - }; - cachedMethods.set(prop, method); - return method; -} -replaceTraps((oldTraps) => ({ - ...oldTraps, - get: (target, prop, receiver) => getMethod(target, prop) || oldTraps.get(target, prop, receiver), - has: (target, prop) => !!getMethod(target, prop) || oldTraps.has(target, prop), -})); - -// @ts-ignore -try { - self['workbox:expiration:7.2.0'] && _(); -} -catch (e) { } - -/* - Copyright 2018 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. -*/ -const DB_NAME = 'workbox-expiration'; -const CACHE_OBJECT_STORE = 'cache-entries'; -const normalizeURL = (unNormalizedUrl) => { - const url = new URL(unNormalizedUrl, location.href); - url.hash = ''; - return url.href; -}; -/** - * Returns the timestamp model. - * - * @private - */ -class CacheTimestampsModel { - /** - * - * @param {string} cacheName - * - * @private - */ - constructor(cacheName) { - this._db = null; - this._cacheName = cacheName; - } - /** - * Performs an upgrade of indexedDB. - * - * @param {IDBPDatabase} db - * - * @private - */ - _upgradeDb(db) { - // TODO(philipwalton): EdgeHTML doesn't support arrays as a keyPath, so we - // have to use the `id` keyPath here and create our own values (a - // concatenation of `url + cacheName`) instead of simply using - // `keyPath: ['url', 'cacheName']`, which is supported in other browsers. - const objStore = db.createObjectStore(CACHE_OBJECT_STORE, { keyPath: 'id' }); - // TODO(philipwalton): once we don't have to support EdgeHTML, we can - // create a single index with the keyPath `['cacheName', 'timestamp']` - // instead of doing both these indexes. - objStore.createIndex('cacheName', 'cacheName', { unique: false }); - objStore.createIndex('timestamp', 'timestamp', { unique: false }); - } - /** - * Performs an upgrade of indexedDB and deletes deprecated DBs. - * - * @param {IDBPDatabase} db - * - * @private - */ - _upgradeDbAndDeleteOldDbs(db) { - this._upgradeDb(db); - if (this._cacheName) { - void deleteDB(this._cacheName); - } - } - /** - * @param {string} url - * @param {number} timestamp - * - * @private - */ - async setTimestamp(url, timestamp) { - url = normalizeURL(url); - const entry = { - url, - timestamp, - cacheName: this._cacheName, - // Creating an ID from the URL and cache name won't be necessary once - // Edge switches to Chromium and all browsers we support work with - // array keyPaths. - id: this._getId(url), - }; - const db = await this.getDb(); - const tx = db.transaction(CACHE_OBJECT_STORE, 'readwrite', { - durability: 'relaxed', - }); - await tx.store.put(entry); - await tx.done; - } - /** - * Returns the timestamp stored for a given URL. - * - * @param {string} url - * @return {number | undefined} - * - * @private - */ - async getTimestamp(url) { - const db = await this.getDb(); - const entry = await db.get(CACHE_OBJECT_STORE, this._getId(url)); - return entry === null || entry === void 0 ? void 0 : entry.timestamp; - } - /** - * Iterates through all the entries in the object store (from newest to - * oldest) and removes entries once either `maxCount` is reached or the - * entry's timestamp is less than `minTimestamp`. - * - * @param {number} minTimestamp - * @param {number} maxCount - * @return {Array} - * - * @private - */ - async expireEntries(minTimestamp, maxCount) { - const db = await this.getDb(); - let cursor = await db - .transaction(CACHE_OBJECT_STORE) - .store.index('timestamp') - .openCursor(null, 'prev'); - const entriesToDelete = []; - let entriesNotDeletedCount = 0; - while (cursor) { - const result = cursor.value; - // TODO(philipwalton): once we can use a multi-key index, we - // won't have to check `cacheName` here. - if (result.cacheName === this._cacheName) { - // Delete an entry if it's older than the max age or - // if we already have the max number allowed. - if ((minTimestamp && result.timestamp < minTimestamp) || - (maxCount && entriesNotDeletedCount >= maxCount)) { - // TODO(philipwalton): we should be able to delete the - // entry right here, but doing so causes an iteration - // bug in Safari stable (fixed in TP). Instead we can - // store the keys of the entries to delete, and then - // delete the separate transactions. - // https://github.com/GoogleChrome/workbox/issues/1978 - // cursor.delete(); - // We only need to return the URL, not the whole entry. - entriesToDelete.push(cursor.value); - } - else { - entriesNotDeletedCount++; - } - } - cursor = await cursor.continue(); - } - // TODO(philipwalton): once the Safari bug in the following issue is fixed, - // we should be able to remove this loop and do the entry deletion in the - // cursor loop above: - // https://github.com/GoogleChrome/workbox/issues/1978 - const urlsDeleted = []; - for (const entry of entriesToDelete) { - await db.delete(CACHE_OBJECT_STORE, entry.id); - urlsDeleted.push(entry.url); - } - return urlsDeleted; - } - /** - * Takes a URL and returns an ID that will be unique in the object store. - * - * @param {string} url - * @return {string} - * - * @private - */ - _getId(url) { - // Creating an ID from the URL and cache name won't be necessary once - // Edge switches to Chromium and all browsers we support work with - // array keyPaths. - return this._cacheName + '|' + normalizeURL(url); - } - /** - * Returns an open connection to the database. - * - * @private - */ - async getDb() { - if (!this._db) { - this._db = await openDB(DB_NAME, 1, { - upgrade: this._upgradeDbAndDeleteOldDbs.bind(this), - }); - } - return this._db; - } -} - -class CacheExpiration { - /** - * To construct a new CacheExpiration instance you must provide at least - * one of the `config` properties. - * - * @param {string} cacheName Name of the cache to apply restrictions to. - * @param {Object} config - * @param {number} [config.maxEntries] The maximum number of entries to cache. - * Entries used the least will be removed as the maximum is reached. - * @param {number} [config.maxAgeSeconds] The maximum age of an entry before - * it's treated as stale and removed. - * @param {Object} [config.matchOptions] The [`CacheQueryOptions`](https://developer.mozilla.org/en-US/docs/Web/API/Cache/delete#Parameters) - * that will be used when calling `delete()` on the cache. - */ - constructor(cacheName, config = {}) { - this._isRunning = false; - this._rerunRequested = false; - this._maxEntries = config.maxEntries; - this._maxAgeSeconds = config.maxAgeSeconds; - this._matchOptions = config.matchOptions; - this._cacheName = cacheName; - this._timestampModel = new CacheTimestampsModel(cacheName); - } - /** - * Expires entries for the given cache and given criteria. - */ - async expireEntries() { - if (this._isRunning) { - this._rerunRequested = true; - return; - } - this._isRunning = true; - const minTimestamp = this._maxAgeSeconds ? Date.now() - this._maxAgeSeconds * 1e3 : 0; - const urlsExpired = await this._timestampModel.expireEntries(minTimestamp, this._maxEntries); - const cache = await self.caches.open(this._cacheName); - for (const url of urlsExpired) { - await cache.delete(url, this._matchOptions); - } - this._isRunning = false; - if (this._rerunRequested) { - this._rerunRequested = false; - dontWaitFor(this.expireEntries()); - } - } - /** - * Update the timestamp for the given URL. This ensures the when - * removing entries based on maximum entries, most recently used - * is accurate or when expiring, the timestamp is up-to-date. - * - * @param {string} url - */ - async updateTimestamp(url) { - await this._timestampModel.setTimestamp(url, Date.now()); - } - /** - * Can be used to check if a URL has expired or not before it's used. - * - * This requires a look up from IndexedDB, so can be slow. - * - * Note: This method will not remove the cached entry, call - * `expireEntries()` to remove indexedDB and Cache entries. - * - * @param {string} url - * @return {boolean} - */ - async isURLExpired(url) { - if (!this._maxAgeSeconds) { - return false; - } else { - const timestamp = await this._timestampModel.getTimestamp(url); - const expireOlderThan = Date.now() - this._maxAgeSeconds * 1e3; - return timestamp !== void 0 ? timestamp < expireOlderThan : true; - } - } - /** - * Removes the IndexedDB object store used to keep track of cache expiration - * metadata. - */ - async delete() { - this._rerunRequested = false; - await this._timestampModel.expireEntries(Infinity); - } -} - -class ExpirationPlugin { - /** - * @param {ExpirationPluginOptions} config - * @param {number} [config.maxEntries] The maximum number of entries to cache. - * Entries used the least will be removed as the maximum is reached. - * @param {number} [config.maxAgeSeconds] The maximum age of an entry before - * it's treated as stale and removed. - * @param {Object} [config.matchOptions] The [`CacheQueryOptions`](https://developer.mozilla.org/en-US/docs/Web/API/Cache/delete#Parameters) - * that will be used when calling `delete()` on the cache. - * @param {boolean} [config.purgeOnQuotaError] Whether to opt this cache in to - * automatic deletion if the available storage quota has been exceeded. - */ - constructor(config = {}) { - this.cachedResponseWillBeUsed = async ({ event, request, cacheName, cachedResponse }) => { - if (!cachedResponse) { - return null; - } - const isFresh = this._isResponseDateFresh(cachedResponse); - const cacheExpiration = this._getCacheExpiration(cacheName); - dontWaitFor(cacheExpiration.expireEntries()); - const updateTimestampDone = cacheExpiration.updateTimestamp(request.url); - if (event) { - try { - event.waitUntil(updateTimestampDone); - } catch (error) { - } - } - return isFresh ? cachedResponse : null; - }; - this.cacheDidUpdate = async ({ cacheName, request }) => { - const cacheExpiration = this._getCacheExpiration(cacheName); - await cacheExpiration.updateTimestamp(request.url); - await cacheExpiration.expireEntries(); - }; - this._config = config; - this._maxAgeSeconds = config.maxAgeSeconds; - this._cacheExpirations = /* @__PURE__ */ new Map(); - if (config.purgeOnQuotaError) { - registerQuotaErrorCallback(() => this.deleteCacheAndMetadata()); - } - } - /** - * A simple helper method to return a CacheExpiration instance for a given - * cache name. - * - * @param {string} cacheName - * @return {CacheExpiration} - * - * @private - */ - _getCacheExpiration(cacheName) { - if (cacheName === cacheNames.getRuntimeName()) { - throw new WorkboxError("expire-custom-caches-only"); - } - let cacheExpiration = this._cacheExpirations.get(cacheName); - if (!cacheExpiration) { - cacheExpiration = new CacheExpiration(cacheName, this._config); - this._cacheExpirations.set(cacheName, cacheExpiration); - } - return cacheExpiration; - } - /** - * @param {Response} cachedResponse - * @return {boolean} - * - * @private - */ - _isResponseDateFresh(cachedResponse) { - if (!this._maxAgeSeconds) { - return true; - } - const dateHeaderTimestamp = this._getDateHeaderTimestamp(cachedResponse); - if (dateHeaderTimestamp === null) { - return true; - } - const now = Date.now(); - return dateHeaderTimestamp >= now - this._maxAgeSeconds * 1e3; - } - /** - * This method will extract the data header and parse it into a useful - * value. - * - * @param {Response} cachedResponse - * @return {number|null} - * - * @private - */ - _getDateHeaderTimestamp(cachedResponse) { - if (!cachedResponse.headers.has("date")) { - return null; - } - const dateHeader = cachedResponse.headers.get("date"); - const parsedDate = new Date(dateHeader); - const headerTime = parsedDate.getTime(); - if (isNaN(headerTime)) { - return null; - } - return headerTime; - } - /** - * This is a helper method that performs two operations: - * - * - Deletes *all* the underlying Cache instances associated with this plugin - * instance, by calling caches.delete() on your behalf. - * - Deletes the metadata from IndexedDB used to keep track of expiration - * details for each Cache instance. - * - * When using cache expiration, calling this method is preferable to calling - * `caches.delete()` directly, since this will ensure that the IndexedDB - * metadata is also cleanly removed and open IndexedDB instances are deleted. - * - * Note that if you're *not* using cache expiration for a given cache, calling - * `caches.delete()` and passing in the cache's name should be sufficient. - * There is no Workbox-specific method needed for cleanup in that case. - */ - async deleteCacheAndMetadata() { - for (const [cacheName, cacheExpiration] of this._cacheExpirations) { - await self.caches.delete(cacheName); - await cacheExpiration.delete(); - } - this._cacheExpirations = /* @__PURE__ */ new Map(); - } -} - -// @ts-ignore -try { - self['workbox:precaching:7.2.0'] && _(); -} -catch (e) { } - -/* - Copyright 2018 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. -*/ -// Name of the search parameter used to store revision info. -const REVISION_SEARCH_PARAM = '__WB_REVISION__'; -/** - * Converts a manifest entry into a versioned URL suitable for precaching. - * - * @param {Object|string} entry - * @return {string} A URL with versioning info. - * - * @private - * @memberof workbox-precaching - */ -function createCacheKey(entry) { - if (!entry) { - throw new WorkboxError('add-to-cache-list-unexpected-type', { entry }); - } - // If a precache manifest entry is a string, it's assumed to be a versioned - // URL, like '/app.abcd1234.js'. Return as-is. - if (typeof entry === 'string') { - const urlObject = new URL(entry, location.href); - return { - cacheKey: urlObject.href, - url: urlObject.href, - }; - } - const { revision, url } = entry; - if (!url) { - throw new WorkboxError('add-to-cache-list-unexpected-type', { entry }); - } - // If there's just a URL and no revision, then it's also assumed to be a - // versioned URL. - if (!revision) { - const urlObject = new URL(url, location.href); - return { - cacheKey: urlObject.href, - url: urlObject.href, - }; - } - // Otherwise, construct a properly versioned URL using the custom Workbox - // search parameter along with the revision info. - const cacheKeyURL = new URL(url, location.href); - const originalURL = new URL(url, location.href); - cacheKeyURL.searchParams.set(REVISION_SEARCH_PARAM, revision); - return { - cacheKey: cacheKeyURL.href, - url: originalURL.href, - }; -} - -/* - Copyright 2020 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. -*/ -/** - * A plugin, designed to be used with PrecacheController, to determine the - * of assets that were updated (or not updated) during the install event. - * - * @private - */ -class PrecacheInstallReportPlugin { - constructor() { - this.updatedURLs = []; - this.notUpdatedURLs = []; - this.handlerWillStart = async ({ request, state, }) => { - // TODO: `state` should never be undefined... - if (state) { - state.originalRequest = request; - } - }; - this.cachedResponseWillBeUsed = async ({ event, state, cachedResponse, }) => { - if (event.type === 'install') { - if (state && - state.originalRequest && - state.originalRequest instanceof Request) { - // TODO: `state` should never be undefined... - const url = state.originalRequest.url; - if (cachedResponse) { - this.notUpdatedURLs.push(url); - } - else { - this.updatedURLs.push(url); - } - } - } - return cachedResponse; - }; - } -} - -/* - Copyright 2020 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. -*/ -/** - * A plugin, designed to be used with PrecacheController, to translate URLs into - * the corresponding cache key, based on the current revision info. - * - * @private - */ -class PrecacheCacheKeyPlugin { - constructor({ precacheController }) { - this.cacheKeyWillBeUsed = async ({ request, params, }) => { - // Params is type any, can't change right now. - /* eslint-disable */ - const cacheKey = (params === null || params === void 0 ? void 0 : params.cacheKey) || - this._precacheController.getCacheKeyForURL(request.url); - /* eslint-enable */ - return cacheKey - ? new Request(cacheKey, { headers: request.headers }) - : request; - }; - this._precacheController = precacheController; - } -} - -class PrecacheStrategy extends Strategy { - /** - * - * @param {Object} [options] - * @param {string} [options.cacheName] Cache name to store and retrieve - * requests. Defaults to the cache names provided by - * {@link workbox-core.cacheNames}. - * @param {Array} [options.plugins] {@link https://developers.google.com/web/tools/workbox/guides/using-plugins|Plugins} - * to use in conjunction with this caching strategy. - * @param {Object} [options.fetchOptions] Values passed along to the - * {@link https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters|init} - * of all fetch() requests made by this strategy. - * @param {Object} [options.matchOptions] The - * {@link https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions|CacheQueryOptions} - * for any `cache.match()` or `cache.put()` calls made by this strategy. - * @param {boolean} [options.fallbackToNetwork=true] Whether to attempt to - * get the response from the network if there's a precache miss. - */ - constructor(options = {}) { - options.cacheName = cacheNames.getPrecacheName(options.cacheName); - super(options); - this._fallbackToNetwork = options.fallbackToNetwork === false ? false : true; - this.plugins.push(PrecacheStrategy.copyRedirectedCacheableResponsesPlugin); - } - /** - * @private - * @param {Request|string} request A request to run this strategy for. - * @param {workbox-strategies.StrategyHandler} handler The event that - * triggered the request. - * @return {Promise} - */ - async _handle(request, handler) { - const response = await handler.cacheMatch(request); - if (response) { - return response; - } - if (handler.event && handler.event.type === "install") { - return await this._handleInstall(request, handler); - } - return await this._handleFetch(request, handler); - } - async _handleFetch(request, handler) { - let response; - const params = handler.params || {}; - if (this._fallbackToNetwork) { - const integrityInManifest = params.integrity; - const integrityInRequest = request.integrity; - const noIntegrityConflict = !integrityInRequest || integrityInRequest === integrityInManifest; - response = await handler.fetch(new Request(request, { - integrity: request.mode !== "no-cors" ? integrityInRequest || integrityInManifest : void 0 - })); - if (integrityInManifest && noIntegrityConflict && request.mode !== "no-cors") { - this._useDefaultCacheabilityPluginIfNeeded(); - await handler.cachePut(request, response.clone()); - } - } else { - throw new WorkboxError("missing-precache-entry", { - cacheName: this.cacheName, - url: request.url - }); - } - return response; - } - async _handleInstall(request, handler) { - this._useDefaultCacheabilityPluginIfNeeded(); - const response = await handler.fetch(request); - const wasCached = await handler.cachePut(request, response.clone()); - if (!wasCached) { - throw new WorkboxError("bad-precaching-response", { - url: request.url, - status: response.status - }); - } - return response; - } - /** - * This method is complex, as there a number of things to account for: - * - * The `plugins` array can be set at construction, and/or it might be added to - * to at any time before the strategy is used. - * - * At the time the strategy is used (i.e. during an `install` event), there - * needs to be at least one plugin that implements `cacheWillUpdate` in the - * array, other than `copyRedirectedCacheableResponsesPlugin`. - * - * - If this method is called and there are no suitable `cacheWillUpdate` - * plugins, we need to add `defaultPrecacheCacheabilityPlugin`. - * - * - If this method is called and there is exactly one `cacheWillUpdate`, then - * we don't have to do anything (this might be a previously added - * `defaultPrecacheCacheabilityPlugin`, or it might be a custom plugin). - * - * - If this method is called and there is more than one `cacheWillUpdate`, - * then we need to check if one is `defaultPrecacheCacheabilityPlugin`. If so, - * we need to remove it. (This situation is unlikely, but it could happen if - * the strategy is used multiple times, the first without a `cacheWillUpdate`, - * and then later on after manually adding a custom `cacheWillUpdate`.) - * - * See https://github.com/GoogleChrome/workbox/issues/2737 for more context. - * - * @private - */ - _useDefaultCacheabilityPluginIfNeeded() { - let defaultPluginIndex = null; - let cacheWillUpdatePluginCount = 0; - for (const [index, plugin] of this.plugins.entries()) { - if (plugin === PrecacheStrategy.copyRedirectedCacheableResponsesPlugin) { - continue; - } - if (plugin === PrecacheStrategy.defaultPrecacheCacheabilityPlugin) { - defaultPluginIndex = index; - } - if (plugin.cacheWillUpdate) { - cacheWillUpdatePluginCount++; - } - } - if (cacheWillUpdatePluginCount === 0) { - this.plugins.push(PrecacheStrategy.defaultPrecacheCacheabilityPlugin); - } else if (cacheWillUpdatePluginCount > 1 && defaultPluginIndex !== null) { - this.plugins.splice(defaultPluginIndex, 1); - } - } -} -PrecacheStrategy.defaultPrecacheCacheabilityPlugin = { - async cacheWillUpdate({ response }) { - if (!response || response.status >= 400) { - return null; - } - return response; - } -}; -PrecacheStrategy.copyRedirectedCacheableResponsesPlugin = { - async cacheWillUpdate({ response }) { - return response.redirected ? await copyResponse(response) : response; - } -}; - -class PrecacheController { - /** - * Create a new PrecacheController. - * - * @param {Object} [options] - * @param {string} [options.cacheName] The cache to use for precaching. - * @param {string} [options.plugins] Plugins to use when precaching as well - * as responding to fetch events for precached assets. - * @param {boolean} [options.fallbackToNetwork=true] Whether to attempt to - * get the response from the network if there's a precache miss. - */ - constructor({ cacheName, plugins = [], fallbackToNetwork = true } = {}) { - this._urlsToCacheKeys = /* @__PURE__ */ new Map(); - this._urlsToCacheModes = /* @__PURE__ */ new Map(); - this._cacheKeysToIntegrities = /* @__PURE__ */ new Map(); - this._strategy = new PrecacheStrategy({ - cacheName: cacheNames.getPrecacheName(cacheName), - plugins: [ - ...plugins, - new PrecacheCacheKeyPlugin({ precacheController: this }) - ], - fallbackToNetwork - }); - this.install = this.install.bind(this); - this.activate = this.activate.bind(this); - } - /** - * @type {workbox-precaching.PrecacheStrategy} The strategy created by this controller and - * used to cache assets and respond to fetch events. - */ - get strategy() { - return this._strategy; - } - /** - * Adds items to the precache list, removing any duplicates and - * stores the files in the - * {@link workbox-core.cacheNames|"precache cache"} when the service - * worker installs. - * - * This method can be called multiple times. - * - * @param {Array} [entries=[]] Array of entries to precache. - */ - precache(entries) { - this.addToCacheList(entries); - if (!this._installAndActiveListenersAdded) { - self.addEventListener("install", this.install); - self.addEventListener("activate", this.activate); - this._installAndActiveListenersAdded = true; - } - } - /** - * This method will add items to the precache list, removing duplicates - * and ensuring the information is valid. - * - * @param {Array} entries - * Array of entries to precache. - */ - addToCacheList(entries) { - const urlsToWarnAbout = []; - for (const entry of entries) { - if (typeof entry === "string") { - urlsToWarnAbout.push(entry); - } else if (entry && entry.revision === void 0) { - urlsToWarnAbout.push(entry.url); - } - const { cacheKey, url } = createCacheKey(entry); - const cacheMode = typeof entry !== "string" && entry.revision ? "reload" : "default"; - if (this._urlsToCacheKeys.has(url) && this._urlsToCacheKeys.get(url) !== cacheKey) { - throw new WorkboxError("add-to-cache-list-conflicting-entries", { - firstEntry: this._urlsToCacheKeys.get(url), - secondEntry: cacheKey - }); - } - if (typeof entry !== "string" && entry.integrity) { - if (this._cacheKeysToIntegrities.has(cacheKey) && this._cacheKeysToIntegrities.get(cacheKey) !== entry.integrity) { - throw new WorkboxError("add-to-cache-list-conflicting-integrities", { - url - }); - } - this._cacheKeysToIntegrities.set(cacheKey, entry.integrity); - } - this._urlsToCacheKeys.set(url, cacheKey); - this._urlsToCacheModes.set(url, cacheMode); - if (urlsToWarnAbout.length > 0) { - const warningMessage = `Workbox is precaching URLs without revision info: ${urlsToWarnAbout.join(", ")} -This is generally NOT safe. Learn more at https://bit.ly/wb-precache`; - { - console.warn(warningMessage); - } - } - } - } - /** - * Precaches new and updated assets. Call this method from the service worker - * install event. - * - * Note: this method calls `event.waitUntil()` for you, so you do not need - * to call it yourself in your event handlers. - * - * @param {ExtendableEvent} event - * @return {Promise} - */ - install(event) { - return waitUntil(event, async () => { - const installReportPlugin = new PrecacheInstallReportPlugin(); - this.strategy.plugins.push(installReportPlugin); - for (const [url, cacheKey] of this._urlsToCacheKeys) { - const integrity = this._cacheKeysToIntegrities.get(cacheKey); - const cacheMode = this._urlsToCacheModes.get(url); - const request = new Request(url, { - integrity, - cache: cacheMode, - credentials: "same-origin" - }); - await Promise.all(this.strategy.handleAll({ - params: { cacheKey }, - request, - event - })); - } - const { updatedURLs, notUpdatedURLs } = installReportPlugin; - return { updatedURLs, notUpdatedURLs }; - }); - } - /** - * Deletes assets that are no longer present in the current precache manifest. - * Call this method from the service worker activate event. - * - * Note: this method calls `event.waitUntil()` for you, so you do not need - * to call it yourself in your event handlers. - * - * @param {ExtendableEvent} event - * @return {Promise} - */ - activate(event) { - return waitUntil(event, async () => { - const cache = await self.caches.open(this.strategy.cacheName); - const currentlyCachedRequests = await cache.keys(); - const expectedCacheKeys = new Set(this._urlsToCacheKeys.values()); - const deletedURLs = []; - for (const request of currentlyCachedRequests) { - if (!expectedCacheKeys.has(request.url)) { - await cache.delete(request); - deletedURLs.push(request.url); - } - } - return { deletedURLs }; - }); - } - /** - * Returns a mapping of a precached URL to the corresponding cache key, taking - * into account the revision information for the URL. - * - * @return {Map} A URL to cache key mapping. - */ - getURLsToCacheKeys() { - return this._urlsToCacheKeys; - } - /** - * Returns a list of all the URLs that have been precached by the current - * service worker. - * - * @return {Array} The precached URLs. - */ - getCachedURLs() { - return [...this._urlsToCacheKeys.keys()]; - } - /** - * Returns the cache key used for storing a given URL. If that URL is - * unversioned, like `/index.html', then the cache key will be the original - * URL with a search parameter appended to it. - * - * @param {string} url A URL whose cache key you want to look up. - * @return {string} The versioned URL that corresponds to a cache key - * for the original URL, or undefined if that URL isn't precached. - */ - getCacheKeyForURL(url) { - const urlObject = new URL(url, location.href); - return this._urlsToCacheKeys.get(urlObject.href); - } - /** - * @param {string} url A cache key whose SRI you want to look up. - * @return {string} The subresource integrity associated with the cache key, - * or undefined if it's not set. - */ - getIntegrityForCacheKey(cacheKey) { - return this._cacheKeysToIntegrities.get(cacheKey); - } - /** - * This acts as a drop-in replacement for - * [`cache.match()`](https://developer.mozilla.org/en-US/docs/Web/API/Cache/match) - * with the following differences: - * - * - It knows what the name of the precache is, and only checks in that cache. - * - It allows you to pass in an "original" URL without versioning parameters, - * and it will automatically look up the correct cache key for the currently - * active revision of that URL. - * - * E.g., `matchPrecache('index.html')` will find the correct precached - * response for the currently active service worker, even if the actual cache - * key is `'/index.html?__WB_REVISION__=1234abcd'`. - * - * @param {string|Request} request The key (without revisioning parameters) - * to look up in the precache. - * @return {Promise} - */ - async matchPrecache(request) { - const url = request instanceof Request ? request.url : request; - const cacheKey = this.getCacheKeyForURL(url); - if (cacheKey) { - const cache = await self.caches.open(this.strategy.cacheName); - return cache.match(cacheKey); - } - return void 0; - } - /** - * Returns a function that looks up `url` in the precache (taking into - * account revision information), and returns the corresponding `Response`. - * - * @param {string} url The precached URL which will be used to lookup the - * `Response`. - * @return {workbox-routing~handlerCallback} - */ - createHandlerBoundToURL(url) { - const cacheKey = this.getCacheKeyForURL(url); - if (!cacheKey) { - throw new WorkboxError("non-precached-url", { url }); - } - return (options) => { - options.request = new Request(url); - options.params = Object.assign({ cacheKey }, options.params); - return this.strategy.handle(options); - }; - } -} - -/* - Copyright 2019 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. -*/ -let precacheController; -/** - * @return {PrecacheController} - * @private - */ -const getOrCreatePrecacheController = () => { - if (!precacheController) { - precacheController = new PrecacheController(); - } - return precacheController; -}; - -/* - Copyright 2018 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. -*/ -/** - * Removes any URL search parameters that should be ignored. - * - * @param {URL} urlObject The original URL. - * @param {Array} ignoreURLParametersMatching RegExps to test against - * each search parameter name. Matches mean that the search parameter should be - * ignored. - * @return {URL} The URL with any ignored search parameters removed. - * - * @private - * @memberof workbox-precaching - */ -function removeIgnoredSearchParams(urlObject, ignoreURLParametersMatching = []) { - // Convert the iterable into an array at the start of the loop to make sure - // deletion doesn't mess up iteration. - for (const paramName of [...urlObject.searchParams.keys()]) { - if (ignoreURLParametersMatching.some((regExp) => regExp.test(paramName))) { - urlObject.searchParams.delete(paramName); - } - } - return urlObject; -} - -/* - Copyright 2019 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. -*/ -/** - * Generator function that yields possible variations on the original URL to - * check, one at a time. - * - * @param {string} url - * @param {Object} options - * - * @private - * @memberof workbox-precaching - */ -function* generateURLVariations(url, { ignoreURLParametersMatching = [/^utm_/, /^fbclid$/], directoryIndex = 'index.html', cleanURLs = true, urlManipulation, } = {}) { - const urlObject = new URL(url, location.href); - urlObject.hash = ''; - yield urlObject.href; - const urlWithoutIgnoredParams = removeIgnoredSearchParams(urlObject, ignoreURLParametersMatching); - yield urlWithoutIgnoredParams.href; - if (directoryIndex && urlWithoutIgnoredParams.pathname.endsWith('/')) { - const directoryURL = new URL(urlWithoutIgnoredParams.href); - directoryURL.pathname += directoryIndex; - yield directoryURL.href; - } - if (cleanURLs) { - const cleanURL = new URL(urlWithoutIgnoredParams.href); - cleanURL.pathname += '.html'; - yield cleanURL.href; - } - if (urlManipulation) { - const additionalURLs = urlManipulation({ url: urlObject }); - for (const urlToAttempt of additionalURLs) { - yield urlToAttempt.href; - } - } -} - -class PrecacheRoute extends Route { - /** - * @param {PrecacheController} precacheController A `PrecacheController` - * instance used to both match requests and respond to fetch events. - * @param {Object} [options] Options to control how requests are matched - * against the list of precached URLs. - * @param {string} [options.directoryIndex=index.html] The `directoryIndex` will - * check cache entries for a URLs ending with '/' to see if there is a hit when - * appending the `directoryIndex` value. - * @param {Array} [options.ignoreURLParametersMatching=[/^utm_/, /^fbclid$/]] An - * array of regex's to remove search params when looking for a cache match. - * @param {boolean} [options.cleanURLs=true] The `cleanURLs` option will - * check the cache for the URL with a `.html` added to the end of the end. - * @param {workbox-precaching~urlManipulation} [options.urlManipulation] - * This is a function that should take a URL and return an array of - * alternative URLs that should be checked for precache matches. - */ - constructor(precacheController, options) { - const match = ({ request }) => { - const urlsToCacheKeys = precacheController.getURLsToCacheKeys(); - for (const possibleURL of generateURLVariations(request.url, options)) { - const cacheKey = urlsToCacheKeys.get(possibleURL); - if (cacheKey) { - const integrity = precacheController.getIntegrityForCacheKey(cacheKey); - return { cacheKey, integrity }; - } - } - return; - }; - super(match, precacheController.strategy); - } -} - -/* - Copyright 2019 Google LLC - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. -*/ -/** - * Add a `fetch` listener to the service worker that will - * respond to - * [network requests]{@link https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers#Custom_responses_to_requests} - * with precached assets. - * - * Requests for assets that aren't precached, the `FetchEvent` will not be - * responded to, allowing the event to fall through to other `fetch` event - * listeners. - * - * @param {Object} [options] See the {@link workbox-precaching.PrecacheRoute} - * options. - * - * @memberof workbox-precaching - */ -function addRoute(options) { - const precacheController = getOrCreatePrecacheController(); - const precacheRoute = new PrecacheRoute(precacheController, options); - registerRoute(precacheRoute); -} - -/* - Copyright 2019 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. -*/ -/** - * Adds items to the precache list, removing any duplicates and - * stores the files in the - * {@link workbox-core.cacheNames|"precache cache"} when the service - * worker installs. - * - * This method can be called multiple times. - * - * Please note: This method **will not** serve any of the cached files for you. - * It only precaches files. To respond to a network request you call - * {@link workbox-precaching.addRoute}. - * - * If you have a single array of files to precache, you can just call - * {@link workbox-precaching.precacheAndRoute}. - * - * @param {Array} [entries=[]] Array of entries to precache. - * - * @memberof workbox-precaching - */ -function precache(entries) { - const precacheController = getOrCreatePrecacheController(); - precacheController.precache(entries); -} - -/* - Copyright 2019 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. -*/ -/** - * This method will add entries to the precache list and add a route to - * respond to fetch events. - * - * This is a convenience method that will call - * {@link workbox-precaching.precache} and - * {@link workbox-precaching.addRoute} in a single call. - * - * @param {Array} entries Array of entries to precache. - * @param {Object} [options] See the - * {@link workbox-precaching.PrecacheRoute} options. - * - * @memberof workbox-precaching - */ -function precacheAndRoute(entries, options) { - precache(entries); - addRoute(options); -} - -self.__WB_DISABLE_DEV_LOGS = true; -self.addEventListener("install", async (_) => { - await self.skipWaiting(); -}); -clientsClaim(); -precacheAndRoute(self.__WB_MANIFEST); -registerRoute( - new RegExp(`^${escapeRegExp(CONFIG.API_BASE)}api/.*\\.json$`), - new StaleWhileRevalidate({ - cacheName: "api-json-cache", - plugins: [ - new ExpirationPlugin({ - purgeOnQuotaError: true, - maxAgeSeconds: CONFIG.ASSET_JSON_CACHE_TTL - }) - ] - }) -); -registerRoute( - new RegExp(`^${escapeRegExp(CONFIG.API_BASE)}assets/.*\\.(?:png|jpg|jpeg|svg|webp)$`), - new CacheFirst({ - cacheName: "api-assets-cache-v1", - plugins: [ - new ExpirationPlugin({ - maxAgeSeconds: CONFIG.ASSET_IMAGE_CACHE_TTL, - purgeOnQuotaError: true - }) - ] - }) -); -//# sourceMappingURL=_dummy.EMaMnWE_.js.map diff --git a/_dummy.EMaMnWE_.js.map b/_dummy.EMaMnWE_.js.map deleted file mode 100644 index e312cf9..0000000 --- a/_dummy.EMaMnWE_.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"_dummy.EMaMnWE_.js","sources":["../node_modules/workbox-core/_version.js","../node_modules/workbox-core/_private/logger.js","../node_modules/workbox-core/models/messages/messageGenerator.js","../node_modules/workbox-core/_private/WorkboxError.js","../node_modules/workbox-core/models/quotaErrorCallbacks.js","../node_modules/workbox-core/registerQuotaErrorCallback.js","../node_modules/workbox-core/_private/cacheNames.js","../node_modules/workbox-core/_private/cacheMatchIgnoreParams.js","../node_modules/workbox-core/_private/canConstructResponseFromBodyStream.js","../node_modules/workbox-core/_private/dontWaitFor.js","../node_modules/workbox-core/_private/Deferred.js","../node_modules/workbox-core/_private/executeQuotaErrorCallbacks.js","../node_modules/workbox-core/_private/getFriendlyURL.js","../node_modules/workbox-core/_private/timeout.js","../node_modules/workbox-core/_private/waitUntil.js","../node_modules/workbox-core/copyResponse.js","../node_modules/workbox-core/clientsClaim.js","../node_modules/workbox-routing/_version.js","../node_modules/workbox-routing/utils/constants.js","../node_modules/workbox-routing/utils/normalizeHandler.js","../node_modules/workbox-routing/Route.js","../node_modules/workbox-routing/RegExpRoute.js","../node_modules/workbox-routing/Router.js","../node_modules/workbox-routing/utils/getOrCreateDefaultRouter.js","../node_modules/workbox-routing/registerRoute.js","../node_modules/workbox-strategies/_version.js","../node_modules/workbox-strategies/StrategyHandler.js","../node_modules/workbox-strategies/Strategy.js","../node_modules/workbox-strategies/CacheFirst.js","../node_modules/workbox-strategies/plugins/cacheOkAndOpaquePlugin.js","../node_modules/workbox-strategies/StaleWhileRevalidate.js","../src/regex.ts","../node_modules/idb/build/wrap-idb-value.js","../node_modules/idb/build/index.js","../node_modules/workbox-expiration/_version.js","../node_modules/workbox-expiration/models/CacheTimestampsModel.js","../node_modules/workbox-expiration/CacheExpiration.js","../node_modules/workbox-expiration/ExpirationPlugin.js","../node_modules/workbox-precaching/_version.js","../node_modules/workbox-precaching/utils/createCacheKey.js","../node_modules/workbox-precaching/utils/PrecacheInstallReportPlugin.js","../node_modules/workbox-precaching/utils/PrecacheCacheKeyPlugin.js","../node_modules/workbox-precaching/PrecacheStrategy.js","../node_modules/workbox-precaching/PrecacheController.js","../node_modules/workbox-precaching/utils/getOrCreatePrecacheController.js","../node_modules/workbox-precaching/utils/removeIgnoredSearchParams.js","../node_modules/workbox-precaching/utils/generateURLVariations.js","../node_modules/workbox-precaching/PrecacheRoute.js","../node_modules/workbox-precaching/addRoute.js","../node_modules/workbox-precaching/precache.js","../node_modules/workbox-precaching/precacheAndRoute.js","../src/service-worker.ts"],"sourcesContent":["\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:core:7.2.0'] && _();\n}\ncatch (e) { }\n","/*\n Copyright 2019 Google LLC\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nconst logger = (process.env.NODE_ENV === 'production'\n ? null\n : (() => {\n // Don't overwrite this value if it's already set.\n // See https://github.com/GoogleChrome/workbox/pull/2284#issuecomment-560470923\n if (!('__WB_DISABLE_DEV_LOGS' in globalThis)) {\n self.__WB_DISABLE_DEV_LOGS = false;\n }\n let inGroup = false;\n const methodToColorMap = {\n debug: `#7f8c8d`,\n log: `#2ecc71`,\n warn: `#f39c12`,\n error: `#c0392b`,\n groupCollapsed: `#3498db`,\n groupEnd: null, // No colored prefix on groupEnd\n };\n const print = function (method, args) {\n if (self.__WB_DISABLE_DEV_LOGS) {\n return;\n }\n if (method === 'groupCollapsed') {\n // Safari doesn't print all console.groupCollapsed() arguments:\n // https://bugs.webkit.org/show_bug.cgi?id=182754\n if (/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n console[method](...args);\n return;\n }\n }\n const styles = [\n `background: ${methodToColorMap[method]}`,\n `border-radius: 0.5em`,\n `color: white`,\n `font-weight: bold`,\n `padding: 2px 0.5em`,\n ];\n // When in a group, the workbox prefix is not displayed.\n const logPrefix = inGroup ? [] : ['%cworkbox', styles.join(';')];\n console[method](...logPrefix, ...args);\n if (method === 'groupCollapsed') {\n inGroup = true;\n }\n if (method === 'groupEnd') {\n inGroup = false;\n }\n };\n // eslint-disable-next-line @typescript-eslint/ban-types\n const api = {};\n const loggerMethods = Object.keys(methodToColorMap);\n for (const key of loggerMethods) {\n const method = key;\n api[method] = (...args) => {\n print(method, args);\n };\n }\n return api;\n })());\nexport { logger };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { messages } from './messages.js';\nimport '../../_version.js';\nconst fallback = (code, ...args) => {\n let msg = code;\n if (args.length > 0) {\n msg += ` :: ${JSON.stringify(args)}`;\n }\n return msg;\n};\nconst generatorFunction = (code, details = {}) => {\n const message = messages[code];\n if (!message) {\n throw new Error(`Unable to find message for code '${code}'.`);\n }\n return message(details);\n};\nexport const messageGenerator = process.env.NODE_ENV === 'production' ? fallback : generatorFunction;\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { messageGenerator } from '../models/messages/messageGenerator.js';\nimport '../_version.js';\n/**\n * Workbox errors should be thrown with this class.\n * This allows use to ensure the type easily in tests,\n * helps developers identify errors from workbox\n * easily and allows use to optimise error\n * messages correctly.\n *\n * @private\n */\nclass WorkboxError extends Error {\n /**\n *\n * @param {string} errorCode The error code that\n * identifies this particular error.\n * @param {Object=} details Any relevant arguments\n * that will help developers identify issues should\n * be added as a key on the context object.\n */\n constructor(errorCode, details) {\n const message = messageGenerator(errorCode, details);\n super(message);\n this.name = errorCode;\n this.details = details;\n }\n}\nexport { WorkboxError };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n// Callbacks to be executed whenever there's a quota error.\n// Can't change Function type right now.\n// eslint-disable-next-line @typescript-eslint/ban-types\nconst quotaErrorCallbacks = new Set();\nexport { quotaErrorCallbacks };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { logger } from './_private/logger.js';\nimport { assert } from './_private/assert.js';\nimport { quotaErrorCallbacks } from './models/quotaErrorCallbacks.js';\nimport './_version.js';\n/**\n * Adds a function to the set of quotaErrorCallbacks that will be executed if\n * there's a quota error.\n *\n * @param {Function} callback\n * @memberof workbox-core\n */\n// Can't change Function type\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction registerQuotaErrorCallback(callback) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isType(callback, 'function', {\n moduleName: 'workbox-core',\n funcName: 'register',\n paramName: 'callback',\n });\n }\n quotaErrorCallbacks.add(callback);\n if (process.env.NODE_ENV !== 'production') {\n logger.log('Registered a callback to respond to quota errors.', callback);\n }\n}\nexport { registerQuotaErrorCallback };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nconst _cacheNameDetails = {\n googleAnalytics: 'googleAnalytics',\n precache: 'precache-v2',\n prefix: 'workbox',\n runtime: 'runtime',\n suffix: typeof registration !== 'undefined' ? registration.scope : '',\n};\nconst _createCacheName = (cacheName) => {\n return [_cacheNameDetails.prefix, cacheName, _cacheNameDetails.suffix]\n .filter((value) => value && value.length > 0)\n .join('-');\n};\nconst eachCacheNameDetail = (fn) => {\n for (const key of Object.keys(_cacheNameDetails)) {\n fn(key);\n }\n};\nexport const cacheNames = {\n updateDetails: (details) => {\n eachCacheNameDetail((key) => {\n if (typeof details[key] === 'string') {\n _cacheNameDetails[key] = details[key];\n }\n });\n },\n getGoogleAnalyticsName: (userCacheName) => {\n return userCacheName || _createCacheName(_cacheNameDetails.googleAnalytics);\n },\n getPrecacheName: (userCacheName) => {\n return userCacheName || _createCacheName(_cacheNameDetails.precache);\n },\n getPrefix: () => {\n return _cacheNameDetails.prefix;\n },\n getRuntimeName: (userCacheName) => {\n return userCacheName || _createCacheName(_cacheNameDetails.runtime);\n },\n getSuffix: () => {\n return _cacheNameDetails.suffix;\n },\n};\n","/*\n Copyright 2020 Google LLC\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nfunction stripParams(fullURL, ignoreParams) {\n const strippedURL = new URL(fullURL);\n for (const param of ignoreParams) {\n strippedURL.searchParams.delete(param);\n }\n return strippedURL.href;\n}\n/**\n * Matches an item in the cache, ignoring specific URL params. This is similar\n * to the `ignoreSearch` option, but it allows you to ignore just specific\n * params (while continuing to match on the others).\n *\n * @private\n * @param {Cache} cache\n * @param {Request} request\n * @param {Object} matchOptions\n * @param {Array} ignoreParams\n * @return {Promise}\n */\nasync function cacheMatchIgnoreParams(cache, request, ignoreParams, matchOptions) {\n const strippedRequestURL = stripParams(request.url, ignoreParams);\n // If the request doesn't include any ignored params, match as normal.\n if (request.url === strippedRequestURL) {\n return cache.match(request, matchOptions);\n }\n // Otherwise, match by comparing keys\n const keysOptions = Object.assign(Object.assign({}, matchOptions), { ignoreSearch: true });\n const cacheKeys = await cache.keys(request, keysOptions);\n for (const cacheKey of cacheKeys) {\n const strippedCacheKeyURL = stripParams(cacheKey.url, ignoreParams);\n if (strippedRequestURL === strippedCacheKeyURL) {\n return cache.match(cacheKey, matchOptions);\n }\n }\n return;\n}\nexport { cacheMatchIgnoreParams };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nlet supportStatus;\n/**\n * A utility function that determines whether the current browser supports\n * constructing a new `Response` from a `response.body` stream.\n *\n * @return {boolean} `true`, if the current browser can successfully\n * construct a `Response` from a `response.body` stream, `false` otherwise.\n *\n * @private\n */\nfunction canConstructResponseFromBodyStream() {\n if (supportStatus === undefined) {\n const testResponse = new Response('');\n if ('body' in testResponse) {\n try {\n new Response(testResponse.body);\n supportStatus = true;\n }\n catch (error) {\n supportStatus = false;\n }\n }\n supportStatus = false;\n }\n return supportStatus;\n}\nexport { canConstructResponseFromBodyStream };\n","/*\n Copyright 2019 Google LLC\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * A helper function that prevents a promise from being flagged as unused.\n *\n * @private\n **/\nexport function dontWaitFor(promise) {\n // Effective no-op.\n void promise.then(() => { });\n}\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * The Deferred class composes Promises in a way that allows for them to be\n * resolved or rejected from outside the constructor. In most cases promises\n * should be used directly, but Deferreds can be necessary when the logic to\n * resolve a promise must be separate.\n *\n * @private\n */\nclass Deferred {\n /**\n * Creates a promise and exposes its resolve and reject functions as methods.\n */\n constructor() {\n this.promise = new Promise((resolve, reject) => {\n this.resolve = resolve;\n this.reject = reject;\n });\n }\n}\nexport { Deferred };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { logger } from '../_private/logger.js';\nimport { quotaErrorCallbacks } from '../models/quotaErrorCallbacks.js';\nimport '../_version.js';\n/**\n * Runs all of the callback functions, one at a time sequentially, in the order\n * in which they were registered.\n *\n * @memberof workbox-core\n * @private\n */\nasync function executeQuotaErrorCallbacks() {\n if (process.env.NODE_ENV !== 'production') {\n logger.log(`About to run ${quotaErrorCallbacks.size} ` +\n `callbacks to clean up caches.`);\n }\n for (const callback of quotaErrorCallbacks) {\n await callback();\n if (process.env.NODE_ENV !== 'production') {\n logger.log(callback, 'is complete.');\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n logger.log('Finished running callbacks.');\n }\n}\nexport { executeQuotaErrorCallbacks };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nconst getFriendlyURL = (url) => {\n const urlObj = new URL(String(url), location.href);\n // See https://github.com/GoogleChrome/workbox/issues/2323\n // We want to include everything, except for the origin if it's same-origin.\n return urlObj.href.replace(new RegExp(`^${location.origin}`), '');\n};\nexport { getFriendlyURL };\n","/*\n Copyright 2019 Google LLC\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * Returns a promise that resolves and the passed number of milliseconds.\n * This utility is an async/await-friendly version of `setTimeout`.\n *\n * @param {number} ms\n * @return {Promise}\n * @private\n */\nexport function timeout(ms) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n","/*\n Copyright 2020 Google LLC\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * A utility method that makes it easier to use `event.waitUntil` with\n * async functions and return the result.\n *\n * @param {ExtendableEvent} event\n * @param {Function} asyncFn\n * @return {Function}\n * @private\n */\nfunction waitUntil(event, asyncFn) {\n const returnPromise = asyncFn();\n event.waitUntil(returnPromise);\n return returnPromise;\n}\nexport { waitUntil };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { canConstructResponseFromBodyStream } from './_private/canConstructResponseFromBodyStream.js';\nimport { WorkboxError } from './_private/WorkboxError.js';\nimport './_version.js';\n/**\n * Allows developers to copy a response and modify its `headers`, `status`,\n * or `statusText` values (the values settable via a\n * [`ResponseInit`]{@link https://developer.mozilla.org/en-US/docs/Web/API/Response/Response#Syntax}\n * object in the constructor).\n * To modify these values, pass a function as the second argument. That\n * function will be invoked with a single object with the response properties\n * `{headers, status, statusText}`. The return value of this function will\n * be used as the `ResponseInit` for the new `Response`. To change the values\n * either modify the passed parameter(s) and return it, or return a totally\n * new object.\n *\n * This method is intentionally limited to same-origin responses, regardless of\n * whether CORS was used or not.\n *\n * @param {Response} response\n * @param {Function} modifier\n * @memberof workbox-core\n */\nasync function copyResponse(response, modifier) {\n let origin = null;\n // If response.url isn't set, assume it's cross-origin and keep origin null.\n if (response.url) {\n const responseURL = new URL(response.url);\n origin = responseURL.origin;\n }\n if (origin !== self.location.origin) {\n throw new WorkboxError('cross-origin-copy-response', { origin });\n }\n const clonedResponse = response.clone();\n // Create a fresh `ResponseInit` object by cloning the headers.\n const responseInit = {\n headers: new Headers(clonedResponse.headers),\n status: clonedResponse.status,\n statusText: clonedResponse.statusText,\n };\n // Apply any user modifications.\n const modifiedResponseInit = modifier ? modifier(responseInit) : responseInit;\n // Create the new response from the body stream and `ResponseInit`\n // modifications. Note: not all browsers support the Response.body stream,\n // so fall back to reading the entire body into memory as a blob.\n const body = canConstructResponseFromBodyStream()\n ? clonedResponse.body\n : await clonedResponse.blob();\n return new Response(body, modifiedResponseInit);\n}\nexport { copyResponse };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport './_version.js';\n/**\n * Claim any currently available clients once the service worker\n * becomes active. This is normally used in conjunction with `skipWaiting()`.\n *\n * @memberof workbox-core\n */\nfunction clientsClaim() {\n self.addEventListener('activate', () => self.clients.claim());\n}\nexport { clientsClaim };\n","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:routing:7.2.0'] && _();\n}\ncatch (e) { }\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * The default HTTP method, 'GET', used when there's no specific method\n * configured for a route.\n *\n * @type {string}\n *\n * @private\n */\nexport const defaultMethod = 'GET';\n/**\n * The list of valid HTTP methods associated with requests that could be routed.\n *\n * @type {Array}\n *\n * @private\n */\nexport const validMethods = [\n 'DELETE',\n 'GET',\n 'HEAD',\n 'PATCH',\n 'POST',\n 'PUT',\n];\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport '../_version.js';\n/**\n * @param {function()|Object} handler Either a function, or an object with a\n * 'handle' method.\n * @return {Object} An object with a handle method.\n *\n * @private\n */\nexport const normalizeHandler = (handler) => {\n if (handler && typeof handler === 'object') {\n if (process.env.NODE_ENV !== 'production') {\n assert.hasMethod(handler, 'handle', {\n moduleName: 'workbox-routing',\n className: 'Route',\n funcName: 'constructor',\n paramName: 'handler',\n });\n }\n return handler;\n }\n else {\n if (process.env.NODE_ENV !== 'production') {\n assert.isType(handler, 'function', {\n moduleName: 'workbox-routing',\n className: 'Route',\n funcName: 'constructor',\n paramName: 'handler',\n });\n }\n return { handle: handler };\n }\n};\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { defaultMethod, validMethods } from './utils/constants.js';\nimport { normalizeHandler } from './utils/normalizeHandler.js';\nimport './_version.js';\n/**\n * A `Route` consists of a pair of callback functions, \"match\" and \"handler\".\n * The \"match\" callback determine if a route should be used to \"handle\" a\n * request by returning a non-falsy value if it can. The \"handler\" callback\n * is called when there is a match and should return a Promise that resolves\n * to a `Response`.\n *\n * @memberof workbox-routing\n */\nclass Route {\n /**\n * Constructor for Route class.\n *\n * @param {workbox-routing~matchCallback} match\n * A callback function that determines whether the route matches a given\n * `fetch` event by returning a non-falsy value.\n * @param {workbox-routing~handlerCallback} handler A callback\n * function that returns a Promise resolving to a Response.\n * @param {string} [method='GET'] The HTTP method to match the Route\n * against.\n */\n constructor(match, handler, method = defaultMethod) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isType(match, 'function', {\n moduleName: 'workbox-routing',\n className: 'Route',\n funcName: 'constructor',\n paramName: 'match',\n });\n if (method) {\n assert.isOneOf(method, validMethods, { paramName: 'method' });\n }\n }\n // These values are referenced directly by Router so cannot be\n // altered by minificaton.\n this.handler = normalizeHandler(handler);\n this.match = match;\n this.method = method;\n }\n /**\n *\n * @param {workbox-routing-handlerCallback} handler A callback\n * function that returns a Promise resolving to a Response\n */\n setCatchHandler(handler) {\n this.catchHandler = normalizeHandler(handler);\n }\n}\nexport { Route };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { Route } from './Route.js';\nimport './_version.js';\n/**\n * RegExpRoute makes it easy to create a regular expression based\n * {@link workbox-routing.Route}.\n *\n * For same-origin requests the RegExp only needs to match part of the URL. For\n * requests against third-party servers, you must define a RegExp that matches\n * the start of the URL.\n *\n * @memberof workbox-routing\n * @extends workbox-routing.Route\n */\nclass RegExpRoute extends Route {\n /**\n * If the regular expression contains\n * [capture groups]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#grouping-back-references},\n * the captured values will be passed to the\n * {@link workbox-routing~handlerCallback} `params`\n * argument.\n *\n * @param {RegExp} regExp The regular expression to match against URLs.\n * @param {workbox-routing~handlerCallback} handler A callback\n * function that returns a Promise resulting in a Response.\n * @param {string} [method='GET'] The HTTP method to match the Route\n * against.\n */\n constructor(regExp, handler, method) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(regExp, RegExp, {\n moduleName: 'workbox-routing',\n className: 'RegExpRoute',\n funcName: 'constructor',\n paramName: 'pattern',\n });\n }\n const match = ({ url }) => {\n const result = regExp.exec(url.href);\n // Return immediately if there's no match.\n if (!result) {\n return;\n }\n // Require that the match start at the first character in the URL string\n // if it's a cross-origin request.\n // See https://github.com/GoogleChrome/workbox/issues/281 for the context\n // behind this behavior.\n if (url.origin !== location.origin && result.index !== 0) {\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`The regular expression '${regExp.toString()}' only partially matched ` +\n `against the cross-origin URL '${url.toString()}'. RegExpRoute's will only ` +\n `handle cross-origin requests if they match the entire URL.`);\n }\n return;\n }\n // If the route matches, but there aren't any capture groups defined, then\n // this will return [], which is truthy and therefore sufficient to\n // indicate a match.\n // If there are capture groups, then it will return their values.\n return result.slice(1);\n };\n super(match, handler, method);\n }\n}\nexport { RegExpRoute };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { defaultMethod } from './utils/constants.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { normalizeHandler } from './utils/normalizeHandler.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport './_version.js';\n/**\n * The Router can be used to process a `FetchEvent` using one or more\n * {@link workbox-routing.Route}, responding with a `Response` if\n * a matching route exists.\n *\n * If no route matches a given a request, the Router will use a \"default\"\n * handler if one is defined.\n *\n * Should the matching Route throw an error, the Router will use a \"catch\"\n * handler if one is defined to gracefully deal with issues and respond with a\n * Request.\n *\n * If a request matches multiple routes, the **earliest** registered route will\n * be used to respond to the request.\n *\n * @memberof workbox-routing\n */\nclass Router {\n /**\n * Initializes a new Router.\n */\n constructor() {\n this._routes = new Map();\n this._defaultHandlerMap = new Map();\n }\n /**\n * @return {Map>} routes A `Map` of HTTP\n * method name ('GET', etc.) to an array of all the corresponding `Route`\n * instances that are registered.\n */\n get routes() {\n return this._routes;\n }\n /**\n * Adds a fetch event listener to respond to events when a route matches\n * the event's request.\n */\n addFetchListener() {\n // See https://github.com/Microsoft/TypeScript/issues/28357#issuecomment-436484705\n self.addEventListener('fetch', ((event) => {\n const { request } = event;\n const responsePromise = this.handleRequest({ request, event });\n if (responsePromise) {\n event.respondWith(responsePromise);\n }\n }));\n }\n /**\n * Adds a message event listener for URLs to cache from the window.\n * This is useful to cache resources loaded on the page prior to when the\n * service worker started controlling it.\n *\n * The format of the message data sent from the window should be as follows.\n * Where the `urlsToCache` array may consist of URL strings or an array of\n * URL string + `requestInit` object (the same as you'd pass to `fetch()`).\n *\n * ```\n * {\n * type: 'CACHE_URLS',\n * payload: {\n * urlsToCache: [\n * './script1.js',\n * './script2.js',\n * ['./script3.js', {mode: 'no-cors'}],\n * ],\n * },\n * }\n * ```\n */\n addCacheListener() {\n // See https://github.com/Microsoft/TypeScript/issues/28357#issuecomment-436484705\n self.addEventListener('message', ((event) => {\n // event.data is type 'any'\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (event.data && event.data.type === 'CACHE_URLS') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const { payload } = event.data;\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Caching URLs from the window`, payload.urlsToCache);\n }\n const requestPromises = Promise.all(payload.urlsToCache.map((entry) => {\n if (typeof entry === 'string') {\n entry = [entry];\n }\n const request = new Request(...entry);\n return this.handleRequest({ request, event });\n // TODO(philipwalton): TypeScript errors without this typecast for\n // some reason (probably a bug). The real type here should work but\n // doesn't: `Array | undefined>`.\n })); // TypeScript\n event.waitUntil(requestPromises);\n // If a MessageChannel was used, reply to the message on success.\n if (event.ports && event.ports[0]) {\n void requestPromises.then(() => event.ports[0].postMessage(true));\n }\n }\n }));\n }\n /**\n * Apply the routing rules to a FetchEvent object to get a Response from an\n * appropriate Route's handler.\n *\n * @param {Object} options\n * @param {Request} options.request The request to handle.\n * @param {ExtendableEvent} options.event The event that triggered the\n * request.\n * @return {Promise|undefined} A promise is returned if a\n * registered route can handle the request. If there is no matching\n * route and there's no `defaultHandler`, `undefined` is returned.\n */\n handleRequest({ request, event, }) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(request, Request, {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'handleRequest',\n paramName: 'options.request',\n });\n }\n const url = new URL(request.url, location.href);\n if (!url.protocol.startsWith('http')) {\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Workbox Router only supports URLs that start with 'http'.`);\n }\n return;\n }\n const sameOrigin = url.origin === location.origin;\n const { params, route } = this.findMatchingRoute({\n event,\n request,\n sameOrigin,\n url,\n });\n let handler = route && route.handler;\n const debugMessages = [];\n if (process.env.NODE_ENV !== 'production') {\n if (handler) {\n debugMessages.push([`Found a route to handle this request:`, route]);\n if (params) {\n debugMessages.push([\n `Passing the following params to the route's handler:`,\n params,\n ]);\n }\n }\n }\n // If we don't have a handler because there was no matching route, then\n // fall back to defaultHandler if that's defined.\n const method = request.method;\n if (!handler && this._defaultHandlerMap.has(method)) {\n if (process.env.NODE_ENV !== 'production') {\n debugMessages.push(`Failed to find a matching route. Falling ` +\n `back to the default handler for ${method}.`);\n }\n handler = this._defaultHandlerMap.get(method);\n }\n if (!handler) {\n if (process.env.NODE_ENV !== 'production') {\n // No handler so Workbox will do nothing. If logs is set of debug\n // i.e. verbose, we should print out this information.\n logger.debug(`No route found for: ${getFriendlyURL(url)}`);\n }\n return;\n }\n if (process.env.NODE_ENV !== 'production') {\n // We have a handler, meaning Workbox is going to handle the route.\n // print the routing details to the console.\n logger.groupCollapsed(`Router is responding to: ${getFriendlyURL(url)}`);\n debugMessages.forEach((msg) => {\n if (Array.isArray(msg)) {\n logger.log(...msg);\n }\n else {\n logger.log(msg);\n }\n });\n logger.groupEnd();\n }\n // Wrap in try and catch in case the handle method throws a synchronous\n // error. It should still callback to the catch handler.\n let responsePromise;\n try {\n responsePromise = handler.handle({ url, request, event, params });\n }\n catch (err) {\n responsePromise = Promise.reject(err);\n }\n // Get route's catch handler, if it exists\n const catchHandler = route && route.catchHandler;\n if (responsePromise instanceof Promise &&\n (this._catchHandler || catchHandler)) {\n responsePromise = responsePromise.catch(async (err) => {\n // If there's a route catch handler, process that first\n if (catchHandler) {\n if (process.env.NODE_ENV !== 'production') {\n // Still include URL here as it will be async from the console group\n // and may not make sense without the URL\n logger.groupCollapsed(`Error thrown when responding to: ` +\n ` ${getFriendlyURL(url)}. Falling back to route's Catch Handler.`);\n logger.error(`Error thrown by:`, route);\n logger.error(err);\n logger.groupEnd();\n }\n try {\n return await catchHandler.handle({ url, request, event, params });\n }\n catch (catchErr) {\n if (catchErr instanceof Error) {\n err = catchErr;\n }\n }\n }\n if (this._catchHandler) {\n if (process.env.NODE_ENV !== 'production') {\n // Still include URL here as it will be async from the console group\n // and may not make sense without the URL\n logger.groupCollapsed(`Error thrown when responding to: ` +\n ` ${getFriendlyURL(url)}. Falling back to global Catch Handler.`);\n logger.error(`Error thrown by:`, route);\n logger.error(err);\n logger.groupEnd();\n }\n return this._catchHandler.handle({ url, request, event });\n }\n throw err;\n });\n }\n return responsePromise;\n }\n /**\n * Checks a request and URL (and optionally an event) against the list of\n * registered routes, and if there's a match, returns the corresponding\n * route along with any params generated by the match.\n *\n * @param {Object} options\n * @param {URL} options.url\n * @param {boolean} options.sameOrigin The result of comparing `url.origin`\n * against the current origin.\n * @param {Request} options.request The request to match.\n * @param {Event} options.event The corresponding event.\n * @return {Object} An object with `route` and `params` properties.\n * They are populated if a matching route was found or `undefined`\n * otherwise.\n */\n findMatchingRoute({ url, sameOrigin, request, event, }) {\n const routes = this._routes.get(request.method) || [];\n for (const route of routes) {\n let params;\n // route.match returns type any, not possible to change right now.\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const matchResult = route.match({ url, sameOrigin, request, event });\n if (matchResult) {\n if (process.env.NODE_ENV !== 'production') {\n // Warn developers that using an async matchCallback is almost always\n // not the right thing to do.\n if (matchResult instanceof Promise) {\n logger.warn(`While routing ${getFriendlyURL(url)}, an async ` +\n `matchCallback function was used. Please convert the ` +\n `following route to use a synchronous matchCallback function:`, route);\n }\n }\n // See https://github.com/GoogleChrome/workbox/issues/2079\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n params = matchResult;\n if (Array.isArray(params) && params.length === 0) {\n // Instead of passing an empty array in as params, use undefined.\n params = undefined;\n }\n else if (matchResult.constructor === Object && // eslint-disable-line\n Object.keys(matchResult).length === 0) {\n // Instead of passing an empty object in as params, use undefined.\n params = undefined;\n }\n else if (typeof matchResult === 'boolean') {\n // For the boolean value true (rather than just something truth-y),\n // don't set params.\n // See https://github.com/GoogleChrome/workbox/pull/2134#issuecomment-513924353\n params = undefined;\n }\n // Return early if have a match.\n return { route, params };\n }\n }\n // If no match was found above, return and empty object.\n return {};\n }\n /**\n * Define a default `handler` that's called when no routes explicitly\n * match the incoming request.\n *\n * Each HTTP method ('GET', 'POST', etc.) gets its own default handler.\n *\n * Without a default handler, unmatched requests will go against the\n * network as if there were no service worker present.\n *\n * @param {workbox-routing~handlerCallback} handler A callback\n * function that returns a Promise resulting in a Response.\n * @param {string} [method='GET'] The HTTP method to associate with this\n * default handler. Each method has its own default.\n */\n setDefaultHandler(handler, method = defaultMethod) {\n this._defaultHandlerMap.set(method, normalizeHandler(handler));\n }\n /**\n * If a Route throws an error while handling a request, this `handler`\n * will be called and given a chance to provide a response.\n *\n * @param {workbox-routing~handlerCallback} handler A callback\n * function that returns a Promise resulting in a Response.\n */\n setCatchHandler(handler) {\n this._catchHandler = normalizeHandler(handler);\n }\n /**\n * Registers a route with the router.\n *\n * @param {workbox-routing.Route} route The route to register.\n */\n registerRoute(route) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isType(route, 'object', {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'registerRoute',\n paramName: 'route',\n });\n assert.hasMethod(route, 'match', {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'registerRoute',\n paramName: 'route',\n });\n assert.isType(route.handler, 'object', {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'registerRoute',\n paramName: 'route',\n });\n assert.hasMethod(route.handler, 'handle', {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'registerRoute',\n paramName: 'route.handler',\n });\n assert.isType(route.method, 'string', {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'registerRoute',\n paramName: 'route.method',\n });\n }\n if (!this._routes.has(route.method)) {\n this._routes.set(route.method, []);\n }\n // Give precedence to all of the earlier routes by adding this additional\n // route to the end of the array.\n this._routes.get(route.method).push(route);\n }\n /**\n * Unregisters a route with the router.\n *\n * @param {workbox-routing.Route} route The route to unregister.\n */\n unregisterRoute(route) {\n if (!this._routes.has(route.method)) {\n throw new WorkboxError('unregister-route-but-not-found-with-method', {\n method: route.method,\n });\n }\n const routeIndex = this._routes.get(route.method).indexOf(route);\n if (routeIndex > -1) {\n this._routes.get(route.method).splice(routeIndex, 1);\n }\n else {\n throw new WorkboxError('unregister-route-route-not-registered');\n }\n }\n}\nexport { Router };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { Router } from '../Router.js';\nimport '../_version.js';\nlet defaultRouter;\n/**\n * Creates a new, singleton Router instance if one does not exist. If one\n * does already exist, that instance is returned.\n *\n * @private\n * @return {Router}\n */\nexport const getOrCreateDefaultRouter = () => {\n if (!defaultRouter) {\n defaultRouter = new Router();\n // The helpers that use the default Router assume these listeners exist.\n defaultRouter.addFetchListener();\n defaultRouter.addCacheListener();\n }\n return defaultRouter;\n};\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { Route } from './Route.js';\nimport { RegExpRoute } from './RegExpRoute.js';\nimport { getOrCreateDefaultRouter } from './utils/getOrCreateDefaultRouter.js';\nimport './_version.js';\n/**\n * Easily register a RegExp, string, or function with a caching\n * strategy to a singleton Router instance.\n *\n * This method will generate a Route for you if needed and\n * call {@link workbox-routing.Router#registerRoute}.\n *\n * @param {RegExp|string|workbox-routing.Route~matchCallback|workbox-routing.Route} capture\n * If the capture param is a `Route`, all other arguments will be ignored.\n * @param {workbox-routing~handlerCallback} [handler] A callback\n * function that returns a Promise resulting in a Response. This parameter\n * is required if `capture` is not a `Route` object.\n * @param {string} [method='GET'] The HTTP method to match the Route\n * against.\n * @return {workbox-routing.Route} The generated `Route`.\n *\n * @memberof workbox-routing\n */\nfunction registerRoute(capture, handler, method) {\n let route;\n if (typeof capture === 'string') {\n const captureUrl = new URL(capture, location.href);\n if (process.env.NODE_ENV !== 'production') {\n if (!(capture.startsWith('/') || capture.startsWith('http'))) {\n throw new WorkboxError('invalid-string', {\n moduleName: 'workbox-routing',\n funcName: 'registerRoute',\n paramName: 'capture',\n });\n }\n // We want to check if Express-style wildcards are in the pathname only.\n // TODO: Remove this log message in v4.\n const valueToCheck = capture.startsWith('http')\n ? captureUrl.pathname\n : capture;\n // See https://github.com/pillarjs/path-to-regexp#parameters\n const wildcards = '[*:?+]';\n if (new RegExp(`${wildcards}`).exec(valueToCheck)) {\n logger.debug(`The '$capture' parameter contains an Express-style wildcard ` +\n `character (${wildcards}). Strings are now always interpreted as ` +\n `exact matches; use a RegExp for partial or wildcard matches.`);\n }\n }\n const matchCallback = ({ url }) => {\n if (process.env.NODE_ENV !== 'production') {\n if (url.pathname === captureUrl.pathname &&\n url.origin !== captureUrl.origin) {\n logger.debug(`${capture} only partially matches the cross-origin URL ` +\n `${url.toString()}. This route will only handle cross-origin requests ` +\n `if they match the entire URL.`);\n }\n }\n return url.href === captureUrl.href;\n };\n // If `capture` is a string then `handler` and `method` must be present.\n route = new Route(matchCallback, handler, method);\n }\n else if (capture instanceof RegExp) {\n // If `capture` is a `RegExp` then `handler` and `method` must be present.\n route = new RegExpRoute(capture, handler, method);\n }\n else if (typeof capture === 'function') {\n // If `capture` is a function then `handler` and `method` must be present.\n route = new Route(capture, handler, method);\n }\n else if (capture instanceof Route) {\n route = capture;\n }\n else {\n throw new WorkboxError('unsupported-route-type', {\n moduleName: 'workbox-routing',\n funcName: 'registerRoute',\n paramName: 'capture',\n });\n }\n const defaultRouter = getOrCreateDefaultRouter();\n defaultRouter.registerRoute(route);\n return route;\n}\nexport { registerRoute };\n","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:strategies:7.2.0'] && _();\n}\ncatch (e) { }\n","/*\n Copyright 2020 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { cacheMatchIgnoreParams } from 'workbox-core/_private/cacheMatchIgnoreParams.js';\nimport { Deferred } from 'workbox-core/_private/Deferred.js';\nimport { executeQuotaErrorCallbacks } from 'workbox-core/_private/executeQuotaErrorCallbacks.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { timeout } from 'workbox-core/_private/timeout.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport './_version.js';\nfunction toRequest(input) {\n return typeof input === 'string' ? new Request(input) : input;\n}\n/**\n * A class created every time a Strategy instance instance calls\n * {@link workbox-strategies.Strategy~handle} or\n * {@link workbox-strategies.Strategy~handleAll} that wraps all fetch and\n * cache actions around plugin callbacks and keeps track of when the strategy\n * is \"done\" (i.e. all added `event.waitUntil()` promises have resolved).\n *\n * @memberof workbox-strategies\n */\nclass StrategyHandler {\n /**\n * Creates a new instance associated with the passed strategy and event\n * that's handling the request.\n *\n * The constructor also initializes the state that will be passed to each of\n * the plugins handling this request.\n *\n * @param {workbox-strategies.Strategy} strategy\n * @param {Object} options\n * @param {Request|string} options.request A request to run this strategy for.\n * @param {ExtendableEvent} options.event The event associated with the\n * request.\n * @param {URL} [options.url]\n * @param {*} [options.params] The return value from the\n * {@link workbox-routing~matchCallback} (if applicable).\n */\n constructor(strategy, options) {\n this._cacheKeys = {};\n /**\n * The request the strategy is performing (passed to the strategy's\n * `handle()` or `handleAll()` method).\n * @name request\n * @instance\n * @type {Request}\n * @memberof workbox-strategies.StrategyHandler\n */\n /**\n * The event associated with this request.\n * @name event\n * @instance\n * @type {ExtendableEvent}\n * @memberof workbox-strategies.StrategyHandler\n */\n /**\n * A `URL` instance of `request.url` (if passed to the strategy's\n * `handle()` or `handleAll()` method).\n * Note: the `url` param will be present if the strategy was invoked\n * from a workbox `Route` object.\n * @name url\n * @instance\n * @type {URL|undefined}\n * @memberof workbox-strategies.StrategyHandler\n */\n /**\n * A `param` value (if passed to the strategy's\n * `handle()` or `handleAll()` method).\n * Note: the `param` param will be present if the strategy was invoked\n * from a workbox `Route` object and the\n * {@link workbox-routing~matchCallback} returned\n * a truthy value (it will be that value).\n * @name params\n * @instance\n * @type {*|undefined}\n * @memberof workbox-strategies.StrategyHandler\n */\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(options.event, ExtendableEvent, {\n moduleName: 'workbox-strategies',\n className: 'StrategyHandler',\n funcName: 'constructor',\n paramName: 'options.event',\n });\n }\n Object.assign(this, options);\n this.event = options.event;\n this._strategy = strategy;\n this._handlerDeferred = new Deferred();\n this._extendLifetimePromises = [];\n // Copy the plugins list (since it's mutable on the strategy),\n // so any mutations don't affect this handler instance.\n this._plugins = [...strategy.plugins];\n this._pluginStateMap = new Map();\n for (const plugin of this._plugins) {\n this._pluginStateMap.set(plugin, {});\n }\n this.event.waitUntil(this._handlerDeferred.promise);\n }\n /**\n * Fetches a given request (and invokes any applicable plugin callback\n * methods) using the `fetchOptions` (for non-navigation requests) and\n * `plugins` defined on the `Strategy` object.\n *\n * The following plugin lifecycle methods are invoked when using this method:\n * - `requestWillFetch()`\n * - `fetchDidSucceed()`\n * - `fetchDidFail()`\n *\n * @param {Request|string} input The URL or request to fetch.\n * @return {Promise}\n */\n async fetch(input) {\n const { event } = this;\n let request = toRequest(input);\n if (request.mode === 'navigate' &&\n event instanceof FetchEvent &&\n event.preloadResponse) {\n const possiblePreloadResponse = (await event.preloadResponse);\n if (possiblePreloadResponse) {\n if (process.env.NODE_ENV !== 'production') {\n logger.log(`Using a preloaded navigation response for ` +\n `'${getFriendlyURL(request.url)}'`);\n }\n return possiblePreloadResponse;\n }\n }\n // If there is a fetchDidFail plugin, we need to save a clone of the\n // original request before it's either modified by a requestWillFetch\n // plugin or before the original request's body is consumed via fetch().\n const originalRequest = this.hasCallback('fetchDidFail')\n ? request.clone()\n : null;\n try {\n for (const cb of this.iterateCallbacks('requestWillFetch')) {\n request = await cb({ request: request.clone(), event });\n }\n }\n catch (err) {\n if (err instanceof Error) {\n throw new WorkboxError('plugin-error-request-will-fetch', {\n thrownErrorMessage: err.message,\n });\n }\n }\n // The request can be altered by plugins with `requestWillFetch` making\n // the original request (most likely from a `fetch` event) different\n // from the Request we make. Pass both to `fetchDidFail` to aid debugging.\n const pluginFilteredRequest = request.clone();\n try {\n let fetchResponse;\n // See https://github.com/GoogleChrome/workbox/issues/1796\n fetchResponse = await fetch(request, request.mode === 'navigate' ? undefined : this._strategy.fetchOptions);\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Network request for ` +\n `'${getFriendlyURL(request.url)}' returned a response with ` +\n `status '${fetchResponse.status}'.`);\n }\n for (const callback of this.iterateCallbacks('fetchDidSucceed')) {\n fetchResponse = await callback({\n event,\n request: pluginFilteredRequest,\n response: fetchResponse,\n });\n }\n return fetchResponse;\n }\n catch (error) {\n if (process.env.NODE_ENV !== 'production') {\n logger.log(`Network request for ` +\n `'${getFriendlyURL(request.url)}' threw an error.`, error);\n }\n // `originalRequest` will only exist if a `fetchDidFail` callback\n // is being used (see above).\n if (originalRequest) {\n await this.runCallbacks('fetchDidFail', {\n error: error,\n event,\n originalRequest: originalRequest.clone(),\n request: pluginFilteredRequest.clone(),\n });\n }\n throw error;\n }\n }\n /**\n * Calls `this.fetch()` and (in the background) runs `this.cachePut()` on\n * the response generated by `this.fetch()`.\n *\n * The call to `this.cachePut()` automatically invokes `this.waitUntil()`,\n * so you do not have to manually call `waitUntil()` on the event.\n *\n * @param {Request|string} input The request or URL to fetch and cache.\n * @return {Promise}\n */\n async fetchAndCachePut(input) {\n const response = await this.fetch(input);\n const responseClone = response.clone();\n void this.waitUntil(this.cachePut(input, responseClone));\n return response;\n }\n /**\n * Matches a request from the cache (and invokes any applicable plugin\n * callback methods) using the `cacheName`, `matchOptions`, and `plugins`\n * defined on the strategy object.\n *\n * The following plugin lifecycle methods are invoked when using this method:\n * - cacheKeyWillBeUsed()\n * - cachedResponseWillBeUsed()\n *\n * @param {Request|string} key The Request or URL to use as the cache key.\n * @return {Promise} A matching response, if found.\n */\n async cacheMatch(key) {\n const request = toRequest(key);\n let cachedResponse;\n const { cacheName, matchOptions } = this._strategy;\n const effectiveRequest = await this.getCacheKey(request, 'read');\n const multiMatchOptions = Object.assign(Object.assign({}, matchOptions), { cacheName });\n cachedResponse = await caches.match(effectiveRequest, multiMatchOptions);\n if (process.env.NODE_ENV !== 'production') {\n if (cachedResponse) {\n logger.debug(`Found a cached response in '${cacheName}'.`);\n }\n else {\n logger.debug(`No cached response found in '${cacheName}'.`);\n }\n }\n for (const callback of this.iterateCallbacks('cachedResponseWillBeUsed')) {\n cachedResponse =\n (await callback({\n cacheName,\n matchOptions,\n cachedResponse,\n request: effectiveRequest,\n event: this.event,\n })) || undefined;\n }\n return cachedResponse;\n }\n /**\n * Puts a request/response pair in the cache (and invokes any applicable\n * plugin callback methods) using the `cacheName` and `plugins` defined on\n * the strategy object.\n *\n * The following plugin lifecycle methods are invoked when using this method:\n * - cacheKeyWillBeUsed()\n * - cacheWillUpdate()\n * - cacheDidUpdate()\n *\n * @param {Request|string} key The request or URL to use as the cache key.\n * @param {Response} response The response to cache.\n * @return {Promise} `false` if a cacheWillUpdate caused the response\n * not be cached, and `true` otherwise.\n */\n async cachePut(key, response) {\n const request = toRequest(key);\n // Run in the next task to avoid blocking other cache reads.\n // https://github.com/w3c/ServiceWorker/issues/1397\n await timeout(0);\n const effectiveRequest = await this.getCacheKey(request, 'write');\n if (process.env.NODE_ENV !== 'production') {\n if (effectiveRequest.method && effectiveRequest.method !== 'GET') {\n throw new WorkboxError('attempt-to-cache-non-get-request', {\n url: getFriendlyURL(effectiveRequest.url),\n method: effectiveRequest.method,\n });\n }\n // See https://github.com/GoogleChrome/workbox/issues/2818\n const vary = response.headers.get('Vary');\n if (vary) {\n logger.debug(`The response for ${getFriendlyURL(effectiveRequest.url)} ` +\n `has a 'Vary: ${vary}' header. ` +\n `Consider setting the {ignoreVary: true} option on your strategy ` +\n `to ensure cache matching and deletion works as expected.`);\n }\n }\n if (!response) {\n if (process.env.NODE_ENV !== 'production') {\n logger.error(`Cannot cache non-existent response for ` +\n `'${getFriendlyURL(effectiveRequest.url)}'.`);\n }\n throw new WorkboxError('cache-put-with-no-response', {\n url: getFriendlyURL(effectiveRequest.url),\n });\n }\n const responseToCache = await this._ensureResponseSafeToCache(response);\n if (!responseToCache) {\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Response '${getFriendlyURL(effectiveRequest.url)}' ` +\n `will not be cached.`, responseToCache);\n }\n return false;\n }\n const { cacheName, matchOptions } = this._strategy;\n const cache = await self.caches.open(cacheName);\n const hasCacheUpdateCallback = this.hasCallback('cacheDidUpdate');\n const oldResponse = hasCacheUpdateCallback\n ? await cacheMatchIgnoreParams(\n // TODO(philipwalton): the `__WB_REVISION__` param is a precaching\n // feature. Consider into ways to only add this behavior if using\n // precaching.\n cache, effectiveRequest.clone(), ['__WB_REVISION__'], matchOptions)\n : null;\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Updating the '${cacheName}' cache with a new Response ` +\n `for ${getFriendlyURL(effectiveRequest.url)}.`);\n }\n try {\n await cache.put(effectiveRequest, hasCacheUpdateCallback ? responseToCache.clone() : responseToCache);\n }\n catch (error) {\n if (error instanceof Error) {\n // See https://developer.mozilla.org/en-US/docs/Web/API/DOMException#exception-QuotaExceededError\n if (error.name === 'QuotaExceededError') {\n await executeQuotaErrorCallbacks();\n }\n throw error;\n }\n }\n for (const callback of this.iterateCallbacks('cacheDidUpdate')) {\n await callback({\n cacheName,\n oldResponse,\n newResponse: responseToCache.clone(),\n request: effectiveRequest,\n event: this.event,\n });\n }\n return true;\n }\n /**\n * Checks the list of plugins for the `cacheKeyWillBeUsed` callback, and\n * executes any of those callbacks found in sequence. The final `Request`\n * object returned by the last plugin is treated as the cache key for cache\n * reads and/or writes. If no `cacheKeyWillBeUsed` plugin callbacks have\n * been registered, the passed request is returned unmodified\n *\n * @param {Request} request\n * @param {string} mode\n * @return {Promise}\n */\n async getCacheKey(request, mode) {\n const key = `${request.url} | ${mode}`;\n if (!this._cacheKeys[key]) {\n let effectiveRequest = request;\n for (const callback of this.iterateCallbacks('cacheKeyWillBeUsed')) {\n effectiveRequest = toRequest(await callback({\n mode,\n request: effectiveRequest,\n event: this.event,\n // params has a type any can't change right now.\n params: this.params, // eslint-disable-line\n }));\n }\n this._cacheKeys[key] = effectiveRequest;\n }\n return this._cacheKeys[key];\n }\n /**\n * Returns true if the strategy has at least one plugin with the given\n * callback.\n *\n * @param {string} name The name of the callback to check for.\n * @return {boolean}\n */\n hasCallback(name) {\n for (const plugin of this._strategy.plugins) {\n if (name in plugin) {\n return true;\n }\n }\n return false;\n }\n /**\n * Runs all plugin callbacks matching the given name, in order, passing the\n * given param object (merged ith the current plugin state) as the only\n * argument.\n *\n * Note: since this method runs all plugins, it's not suitable for cases\n * where the return value of a callback needs to be applied prior to calling\n * the next callback. See\n * {@link workbox-strategies.StrategyHandler#iterateCallbacks}\n * below for how to handle that case.\n *\n * @param {string} name The name of the callback to run within each plugin.\n * @param {Object} param The object to pass as the first (and only) param\n * when executing each callback. This object will be merged with the\n * current plugin state prior to callback execution.\n */\n async runCallbacks(name, param) {\n for (const callback of this.iterateCallbacks(name)) {\n // TODO(philipwalton): not sure why `any` is needed. It seems like\n // this should work with `as WorkboxPluginCallbackParam[C]`.\n await callback(param);\n }\n }\n /**\n * Accepts a callback and returns an iterable of matching plugin callbacks,\n * where each callback is wrapped with the current handler state (i.e. when\n * you call each callback, whatever object parameter you pass it will\n * be merged with the plugin's current state).\n *\n * @param {string} name The name fo the callback to run\n * @return {Array}\n */\n *iterateCallbacks(name) {\n for (const plugin of this._strategy.plugins) {\n if (typeof plugin[name] === 'function') {\n const state = this._pluginStateMap.get(plugin);\n const statefulCallback = (param) => {\n const statefulParam = Object.assign(Object.assign({}, param), { state });\n // TODO(philipwalton): not sure why `any` is needed. It seems like\n // this should work with `as WorkboxPluginCallbackParam[C]`.\n return plugin[name](statefulParam);\n };\n yield statefulCallback;\n }\n }\n }\n /**\n * Adds a promise to the\n * [extend lifetime promises]{@link https://w3c.github.io/ServiceWorker/#extendableevent-extend-lifetime-promises}\n * of the event event associated with the request being handled (usually a\n * `FetchEvent`).\n *\n * Note: you can await\n * {@link workbox-strategies.StrategyHandler~doneWaiting}\n * to know when all added promises have settled.\n *\n * @param {Promise} promise A promise to add to the extend lifetime promises\n * of the event that triggered the request.\n */\n waitUntil(promise) {\n this._extendLifetimePromises.push(promise);\n return promise;\n }\n /**\n * Returns a promise that resolves once all promises passed to\n * {@link workbox-strategies.StrategyHandler~waitUntil}\n * have settled.\n *\n * Note: any work done after `doneWaiting()` settles should be manually\n * passed to an event's `waitUntil()` method (not this handler's\n * `waitUntil()` method), otherwise the service worker thread my be killed\n * prior to your work completing.\n */\n async doneWaiting() {\n let promise;\n while ((promise = this._extendLifetimePromises.shift())) {\n await promise;\n }\n }\n /**\n * Stops running the strategy and immediately resolves any pending\n * `waitUntil()` promises.\n */\n destroy() {\n this._handlerDeferred.resolve(null);\n }\n /**\n * This method will call cacheWillUpdate on the available plugins (or use\n * status === 200) to determine if the Response is safe and valid to cache.\n *\n * @param {Request} options.request\n * @param {Response} options.response\n * @return {Promise}\n *\n * @private\n */\n async _ensureResponseSafeToCache(response) {\n let responseToCache = response;\n let pluginsUsed = false;\n for (const callback of this.iterateCallbacks('cacheWillUpdate')) {\n responseToCache =\n (await callback({\n request: this.request,\n response: responseToCache,\n event: this.event,\n })) || undefined;\n pluginsUsed = true;\n if (!responseToCache) {\n break;\n }\n }\n if (!pluginsUsed) {\n if (responseToCache && responseToCache.status !== 200) {\n responseToCache = undefined;\n }\n if (process.env.NODE_ENV !== 'production') {\n if (responseToCache) {\n if (responseToCache.status !== 200) {\n if (responseToCache.status === 0) {\n logger.warn(`The response for '${this.request.url}' ` +\n `is an opaque response. The caching strategy that you're ` +\n `using will not cache opaque responses by default.`);\n }\n else {\n logger.debug(`The response for '${this.request.url}' ` +\n `returned a status code of '${response.status}' and won't ` +\n `be cached as a result.`);\n }\n }\n }\n }\n }\n return responseToCache;\n }\n}\nexport { StrategyHandler };\n","/*\n Copyright 2020 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { cacheNames } from 'workbox-core/_private/cacheNames.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { StrategyHandler } from './StrategyHandler.js';\nimport './_version.js';\n/**\n * An abstract base class that all other strategy classes must extend from:\n *\n * @memberof workbox-strategies\n */\nclass Strategy {\n /**\n * Creates a new instance of the strategy and sets all documented option\n * properties as public instance properties.\n *\n * Note: if a custom strategy class extends the base Strategy class and does\n * not need more than these properties, it does not need to define its own\n * constructor.\n *\n * @param {Object} [options]\n * @param {string} [options.cacheName] Cache name to store and retrieve\n * requests. Defaults to the cache names provided by\n * {@link workbox-core.cacheNames}.\n * @param {Array} [options.plugins] [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}\n * to use in conjunction with this caching strategy.\n * @param {Object} [options.fetchOptions] Values passed along to the\n * [`init`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters)\n * of [non-navigation](https://github.com/GoogleChrome/workbox/issues/1796)\n * `fetch()` requests made by this strategy.\n * @param {Object} [options.matchOptions] The\n * [`CacheQueryOptions`]{@link https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions}\n * for any `cache.match()` or `cache.put()` calls made by this strategy.\n */\n constructor(options = {}) {\n /**\n * Cache name to store and retrieve\n * requests. Defaults to the cache names provided by\n * {@link workbox-core.cacheNames}.\n *\n * @type {string}\n */\n this.cacheName = cacheNames.getRuntimeName(options.cacheName);\n /**\n * The list\n * [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}\n * used by this strategy.\n *\n * @type {Array}\n */\n this.plugins = options.plugins || [];\n /**\n * Values passed along to the\n * [`init`]{@link https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters}\n * of all fetch() requests made by this strategy.\n *\n * @type {Object}\n */\n this.fetchOptions = options.fetchOptions;\n /**\n * The\n * [`CacheQueryOptions`]{@link https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions}\n * for any `cache.match()` or `cache.put()` calls made by this strategy.\n *\n * @type {Object}\n */\n this.matchOptions = options.matchOptions;\n }\n /**\n * Perform a request strategy and returns a `Promise` that will resolve with\n * a `Response`, invoking all relevant plugin callbacks.\n *\n * When a strategy instance is registered with a Workbox\n * {@link workbox-routing.Route}, this method is automatically\n * called when the route matches.\n *\n * Alternatively, this method can be used in a standalone `FetchEvent`\n * listener by passing it to `event.respondWith()`.\n *\n * @param {FetchEvent|Object} options A `FetchEvent` or an object with the\n * properties listed below.\n * @param {Request|string} options.request A request to run this strategy for.\n * @param {ExtendableEvent} options.event The event associated with the\n * request.\n * @param {URL} [options.url]\n * @param {*} [options.params]\n */\n handle(options) {\n const [responseDone] = this.handleAll(options);\n return responseDone;\n }\n /**\n * Similar to {@link workbox-strategies.Strategy~handle}, but\n * instead of just returning a `Promise` that resolves to a `Response` it\n * it will return an tuple of `[response, done]` promises, where the former\n * (`response`) is equivalent to what `handle()` returns, and the latter is a\n * Promise that will resolve once any promises that were added to\n * `event.waitUntil()` as part of performing the strategy have completed.\n *\n * You can await the `done` promise to ensure any extra work performed by\n * the strategy (usually caching responses) completes successfully.\n *\n * @param {FetchEvent|Object} options A `FetchEvent` or an object with the\n * properties listed below.\n * @param {Request|string} options.request A request to run this strategy for.\n * @param {ExtendableEvent} options.event The event associated with the\n * request.\n * @param {URL} [options.url]\n * @param {*} [options.params]\n * @return {Array} A tuple of [response, done]\n * promises that can be used to determine when the response resolves as\n * well as when the handler has completed all its work.\n */\n handleAll(options) {\n // Allow for flexible options to be passed.\n if (options instanceof FetchEvent) {\n options = {\n event: options,\n request: options.request,\n };\n }\n const event = options.event;\n const request = typeof options.request === 'string'\n ? new Request(options.request)\n : options.request;\n const params = 'params' in options ? options.params : undefined;\n const handler = new StrategyHandler(this, { event, request, params });\n const responseDone = this._getResponse(handler, request, event);\n const handlerDone = this._awaitComplete(responseDone, handler, request, event);\n // Return an array of promises, suitable for use with Promise.all().\n return [responseDone, handlerDone];\n }\n async _getResponse(handler, request, event) {\n await handler.runCallbacks('handlerWillStart', { event, request });\n let response = undefined;\n try {\n response = await this._handle(request, handler);\n // The \"official\" Strategy subclasses all throw this error automatically,\n // but in case a third-party Strategy doesn't, ensure that we have a\n // consistent failure when there's no response or an error response.\n if (!response || response.type === 'error') {\n throw new WorkboxError('no-response', { url: request.url });\n }\n }\n catch (error) {\n if (error instanceof Error) {\n for (const callback of handler.iterateCallbacks('handlerDidError')) {\n response = await callback({ error, event, request });\n if (response) {\n break;\n }\n }\n }\n if (!response) {\n throw error;\n }\n else if (process.env.NODE_ENV !== 'production') {\n logger.log(`While responding to '${getFriendlyURL(request.url)}', ` +\n `an ${error instanceof Error ? error.toString() : ''} error occurred. Using a fallback response provided by ` +\n `a handlerDidError plugin.`);\n }\n }\n for (const callback of handler.iterateCallbacks('handlerWillRespond')) {\n response = await callback({ event, request, response });\n }\n return response;\n }\n async _awaitComplete(responseDone, handler, request, event) {\n let response;\n let error;\n try {\n response = await responseDone;\n }\n catch (error) {\n // Ignore errors, as response errors should be caught via the `response`\n // promise above. The `done` promise will only throw for errors in\n // promises passed to `handler.waitUntil()`.\n }\n try {\n await handler.runCallbacks('handlerDidRespond', {\n event,\n request,\n response,\n });\n await handler.doneWaiting();\n }\n catch (waitUntilError) {\n if (waitUntilError instanceof Error) {\n error = waitUntilError;\n }\n }\n await handler.runCallbacks('handlerDidComplete', {\n event,\n request,\n response,\n error: error,\n });\n handler.destroy();\n if (error) {\n throw error;\n }\n }\n}\nexport { Strategy };\n/**\n * Classes extending the `Strategy` based class should implement this method,\n * and leverage the {@link workbox-strategies.StrategyHandler}\n * arg to perform all fetching and cache logic, which will ensure all relevant\n * cache, cache options, fetch options and plugins are used (per the current\n * strategy instance).\n *\n * @name _handle\n * @instance\n * @abstract\n * @function\n * @param {Request} request\n * @param {workbox-strategies.StrategyHandler} handler\n * @return {Promise}\n *\n * @memberof workbox-strategies.Strategy\n */\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { Strategy } from './Strategy.js';\nimport { messages } from './utils/messages.js';\nimport './_version.js';\n/**\n * An implementation of a [cache-first](https://developer.chrome.com/docs/workbox/caching-strategies-overview/#cache-first-falling-back-to-network)\n * request strategy.\n *\n * A cache first strategy is useful for assets that have been revisioned,\n * such as URLs like `/styles/example.a8f5f1.css`, since they\n * can be cached for long periods of time.\n *\n * If the network request fails, and there is no cache match, this will throw\n * a `WorkboxError` exception.\n *\n * @extends workbox-strategies.Strategy\n * @memberof workbox-strategies\n */\nclass CacheFirst extends Strategy {\n /**\n * @private\n * @param {Request|string} request A request to run this strategy for.\n * @param {workbox-strategies.StrategyHandler} handler The event that\n * triggered the request.\n * @return {Promise}\n */\n async _handle(request, handler) {\n const logs = [];\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(request, Request, {\n moduleName: 'workbox-strategies',\n className: this.constructor.name,\n funcName: 'makeRequest',\n paramName: 'request',\n });\n }\n let response = await handler.cacheMatch(request);\n let error = undefined;\n if (!response) {\n if (process.env.NODE_ENV !== 'production') {\n logs.push(`No response found in the '${this.cacheName}' cache. ` +\n `Will respond with a network request.`);\n }\n try {\n response = await handler.fetchAndCachePut(request);\n }\n catch (err) {\n if (err instanceof Error) {\n error = err;\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n if (response) {\n logs.push(`Got response from network.`);\n }\n else {\n logs.push(`Unable to get a response from the network.`);\n }\n }\n }\n else {\n if (process.env.NODE_ENV !== 'production') {\n logs.push(`Found a cached response in the '${this.cacheName}' cache.`);\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n logger.groupCollapsed(messages.strategyStart(this.constructor.name, request));\n for (const log of logs) {\n logger.log(log);\n }\n messages.printFinalResponse(response);\n logger.groupEnd();\n }\n if (!response) {\n throw new WorkboxError('no-response', { url: request.url, error });\n }\n return response;\n }\n}\nexport { CacheFirst };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nexport const cacheOkAndOpaquePlugin = {\n /**\n * Returns a valid response (to allow caching) if the status is 200 (OK) or\n * 0 (opaque).\n *\n * @param {Object} options\n * @param {Response} options.response\n * @return {Response|null}\n *\n * @private\n */\n cacheWillUpdate: async ({ response }) => {\n if (response.status === 200 || response.status === 0) {\n return response;\n }\n return null;\n },\n};\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { cacheOkAndOpaquePlugin } from './plugins/cacheOkAndOpaquePlugin.js';\nimport { Strategy } from './Strategy.js';\nimport { messages } from './utils/messages.js';\nimport './_version.js';\n/**\n * An implementation of a\n * [stale-while-revalidate](https://developer.chrome.com/docs/workbox/caching-strategies-overview/#stale-while-revalidate)\n * request strategy.\n *\n * Resources are requested from both the cache and the network in parallel.\n * The strategy will respond with the cached version if available, otherwise\n * wait for the network response. The cache is updated with the network response\n * with each successful request.\n *\n * By default, this strategy will cache responses with a 200 status code as\n * well as [opaque responses](https://developer.chrome.com/docs/workbox/caching-resources-during-runtime/#opaque-responses).\n * Opaque responses are cross-origin requests where the response doesn't\n * support [CORS](https://enable-cors.org/).\n *\n * If the network request fails, and there is no cache match, this will throw\n * a `WorkboxError` exception.\n *\n * @extends workbox-strategies.Strategy\n * @memberof workbox-strategies\n */\nclass StaleWhileRevalidate extends Strategy {\n /**\n * @param {Object} [options]\n * @param {string} [options.cacheName] Cache name to store and retrieve\n * requests. Defaults to cache names provided by\n * {@link workbox-core.cacheNames}.\n * @param {Array} [options.plugins] [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}\n * to use in conjunction with this caching strategy.\n * @param {Object} [options.fetchOptions] Values passed along to the\n * [`init`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters)\n * of [non-navigation](https://github.com/GoogleChrome/workbox/issues/1796)\n * `fetch()` requests made by this strategy.\n * @param {Object} [options.matchOptions] [`CacheQueryOptions`](https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions)\n */\n constructor(options = {}) {\n super(options);\n // If this instance contains no plugins with a 'cacheWillUpdate' callback,\n // prepend the `cacheOkAndOpaquePlugin` plugin to the plugins list.\n if (!this.plugins.some((p) => 'cacheWillUpdate' in p)) {\n this.plugins.unshift(cacheOkAndOpaquePlugin);\n }\n }\n /**\n * @private\n * @param {Request|string} request A request to run this strategy for.\n * @param {workbox-strategies.StrategyHandler} handler The event that\n * triggered the request.\n * @return {Promise}\n */\n async _handle(request, handler) {\n const logs = [];\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(request, Request, {\n moduleName: 'workbox-strategies',\n className: this.constructor.name,\n funcName: 'handle',\n paramName: 'request',\n });\n }\n const fetchAndCachePromise = handler.fetchAndCachePut(request).catch(() => {\n // Swallow this error because a 'no-response' error will be thrown in\n // main handler return flow. This will be in the `waitUntil()` flow.\n });\n void handler.waitUntil(fetchAndCachePromise);\n let response = await handler.cacheMatch(request);\n let error;\n if (response) {\n if (process.env.NODE_ENV !== 'production') {\n logs.push(`Found a cached response in the '${this.cacheName}'` +\n ` cache. Will update with the network response in the background.`);\n }\n }\n else {\n if (process.env.NODE_ENV !== 'production') {\n logs.push(`No response found in the '${this.cacheName}' cache. ` +\n `Will wait for the network response.`);\n }\n try {\n // NOTE(philipwalton): Really annoying that we have to type cast here.\n // https://github.com/microsoft/TypeScript/issues/20006\n response = (await fetchAndCachePromise);\n }\n catch (err) {\n if (err instanceof Error) {\n error = err;\n }\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n logger.groupCollapsed(messages.strategyStart(this.constructor.name, request));\n for (const log of logs) {\n logger.log(log);\n }\n messages.printFinalResponse(response);\n logger.groupEnd();\n }\n if (!response) {\n throw new WorkboxError('no-response', { url: request.url, error });\n }\n return response;\n }\n}\nexport { StaleWhileRevalidate };\n","export function escapeRegExp(value: string) {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'); // $& means the whole matched string\n}\n","const instanceOfAny = (object, constructors) => constructors.some((c) => object instanceof c);\n\nlet idbProxyableTypes;\nlet cursorAdvanceMethods;\n// This is a function to prevent it throwing up in node environments.\nfunction getIdbProxyableTypes() {\n return (idbProxyableTypes ||\n (idbProxyableTypes = [\n IDBDatabase,\n IDBObjectStore,\n IDBIndex,\n IDBCursor,\n IDBTransaction,\n ]));\n}\n// This is a function to prevent it throwing up in node environments.\nfunction getCursorAdvanceMethods() {\n return (cursorAdvanceMethods ||\n (cursorAdvanceMethods = [\n IDBCursor.prototype.advance,\n IDBCursor.prototype.continue,\n IDBCursor.prototype.continuePrimaryKey,\n ]));\n}\nconst cursorRequestMap = new WeakMap();\nconst transactionDoneMap = new WeakMap();\nconst transactionStoreNamesMap = new WeakMap();\nconst transformCache = new WeakMap();\nconst reverseTransformCache = new WeakMap();\nfunction promisifyRequest(request) {\n const promise = new Promise((resolve, reject) => {\n const unlisten = () => {\n request.removeEventListener('success', success);\n request.removeEventListener('error', error);\n };\n const success = () => {\n resolve(wrap(request.result));\n unlisten();\n };\n const error = () => {\n reject(request.error);\n unlisten();\n };\n request.addEventListener('success', success);\n request.addEventListener('error', error);\n });\n promise\n .then((value) => {\n // Since cursoring reuses the IDBRequest (*sigh*), we cache it for later retrieval\n // (see wrapFunction).\n if (value instanceof IDBCursor) {\n cursorRequestMap.set(value, request);\n }\n // Catching to avoid \"Uncaught Promise exceptions\"\n })\n .catch(() => { });\n // This mapping exists in reverseTransformCache but doesn't doesn't exist in transformCache. This\n // is because we create many promises from a single IDBRequest.\n reverseTransformCache.set(promise, request);\n return promise;\n}\nfunction cacheDonePromiseForTransaction(tx) {\n // Early bail if we've already created a done promise for this transaction.\n if (transactionDoneMap.has(tx))\n return;\n const done = new Promise((resolve, reject) => {\n const unlisten = () => {\n tx.removeEventListener('complete', complete);\n tx.removeEventListener('error', error);\n tx.removeEventListener('abort', error);\n };\n const complete = () => {\n resolve();\n unlisten();\n };\n const error = () => {\n reject(tx.error || new DOMException('AbortError', 'AbortError'));\n unlisten();\n };\n tx.addEventListener('complete', complete);\n tx.addEventListener('error', error);\n tx.addEventListener('abort', error);\n });\n // Cache it for later retrieval.\n transactionDoneMap.set(tx, done);\n}\nlet idbProxyTraps = {\n get(target, prop, receiver) {\n if (target instanceof IDBTransaction) {\n // Special handling for transaction.done.\n if (prop === 'done')\n return transactionDoneMap.get(target);\n // Polyfill for objectStoreNames because of Edge.\n if (prop === 'objectStoreNames') {\n return target.objectStoreNames || transactionStoreNamesMap.get(target);\n }\n // Make tx.store return the only store in the transaction, or undefined if there are many.\n if (prop === 'store') {\n return receiver.objectStoreNames[1]\n ? undefined\n : receiver.objectStore(receiver.objectStoreNames[0]);\n }\n }\n // Else transform whatever we get back.\n return wrap(target[prop]);\n },\n set(target, prop, value) {\n target[prop] = value;\n return true;\n },\n has(target, prop) {\n if (target instanceof IDBTransaction &&\n (prop === 'done' || prop === 'store')) {\n return true;\n }\n return prop in target;\n },\n};\nfunction replaceTraps(callback) {\n idbProxyTraps = callback(idbProxyTraps);\n}\nfunction wrapFunction(func) {\n // Due to expected object equality (which is enforced by the caching in `wrap`), we\n // only create one new func per func.\n // Edge doesn't support objectStoreNames (booo), so we polyfill it here.\n if (func === IDBDatabase.prototype.transaction &&\n !('objectStoreNames' in IDBTransaction.prototype)) {\n return function (storeNames, ...args) {\n const tx = func.call(unwrap(this), storeNames, ...args);\n transactionStoreNamesMap.set(tx, storeNames.sort ? storeNames.sort() : [storeNames]);\n return wrap(tx);\n };\n }\n // Cursor methods are special, as the behaviour is a little more different to standard IDB. In\n // IDB, you advance the cursor and wait for a new 'success' on the IDBRequest that gave you the\n // cursor. It's kinda like a promise that can resolve with many values. That doesn't make sense\n // with real promises, so each advance methods returns a new promise for the cursor object, or\n // undefined if the end of the cursor has been reached.\n if (getCursorAdvanceMethods().includes(func)) {\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n func.apply(unwrap(this), args);\n return wrap(cursorRequestMap.get(this));\n };\n }\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n return wrap(func.apply(unwrap(this), args));\n };\n}\nfunction transformCachableValue(value) {\n if (typeof value === 'function')\n return wrapFunction(value);\n // This doesn't return, it just creates a 'done' promise for the transaction,\n // which is later returned for transaction.done (see idbObjectHandler).\n if (value instanceof IDBTransaction)\n cacheDonePromiseForTransaction(value);\n if (instanceOfAny(value, getIdbProxyableTypes()))\n return new Proxy(value, idbProxyTraps);\n // Return the same value back if we're not going to transform it.\n return value;\n}\nfunction wrap(value) {\n // We sometimes generate multiple promises from a single IDBRequest (eg when cursoring), because\n // IDB is weird and a single IDBRequest can yield many responses, so these can't be cached.\n if (value instanceof IDBRequest)\n return promisifyRequest(value);\n // If we've already transformed this value before, reuse the transformed value.\n // This is faster, but it also provides object equality.\n if (transformCache.has(value))\n return transformCache.get(value);\n const newValue = transformCachableValue(value);\n // Not all types are transformed.\n // These may be primitive types, so they can't be WeakMap keys.\n if (newValue !== value) {\n transformCache.set(value, newValue);\n reverseTransformCache.set(newValue, value);\n }\n return newValue;\n}\nconst unwrap = (value) => reverseTransformCache.get(value);\n\nexport { reverseTransformCache as a, instanceOfAny as i, replaceTraps as r, unwrap as u, wrap as w };\n","import { w as wrap, r as replaceTraps } from './wrap-idb-value.js';\nexport { u as unwrap, w as wrap } from './wrap-idb-value.js';\n\n/**\n * Open a database.\n *\n * @param name Name of the database.\n * @param version Schema version.\n * @param callbacks Additional callbacks.\n */\nfunction openDB(name, version, { blocked, upgrade, blocking, terminated } = {}) {\n const request = indexedDB.open(name, version);\n const openPromise = wrap(request);\n if (upgrade) {\n request.addEventListener('upgradeneeded', (event) => {\n upgrade(wrap(request.result), event.oldVersion, event.newVersion, wrap(request.transaction), event);\n });\n }\n if (blocked) {\n request.addEventListener('blocked', (event) => blocked(\n // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405\n event.oldVersion, event.newVersion, event));\n }\n openPromise\n .then((db) => {\n if (terminated)\n db.addEventListener('close', () => terminated());\n if (blocking) {\n db.addEventListener('versionchange', (event) => blocking(event.oldVersion, event.newVersion, event));\n }\n })\n .catch(() => { });\n return openPromise;\n}\n/**\n * Delete a database.\n *\n * @param name Name of the database.\n */\nfunction deleteDB(name, { blocked } = {}) {\n const request = indexedDB.deleteDatabase(name);\n if (blocked) {\n request.addEventListener('blocked', (event) => blocked(\n // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405\n event.oldVersion, event));\n }\n return wrap(request).then(() => undefined);\n}\n\nconst readMethods = ['get', 'getKey', 'getAll', 'getAllKeys', 'count'];\nconst writeMethods = ['put', 'add', 'delete', 'clear'];\nconst cachedMethods = new Map();\nfunction getMethod(target, prop) {\n if (!(target instanceof IDBDatabase &&\n !(prop in target) &&\n typeof prop === 'string')) {\n return;\n }\n if (cachedMethods.get(prop))\n return cachedMethods.get(prop);\n const targetFuncName = prop.replace(/FromIndex$/, '');\n const useIndex = prop !== targetFuncName;\n const isWrite = writeMethods.includes(targetFuncName);\n if (\n // Bail if the target doesn't exist on the target. Eg, getAll isn't in Edge.\n !(targetFuncName in (useIndex ? IDBIndex : IDBObjectStore).prototype) ||\n !(isWrite || readMethods.includes(targetFuncName))) {\n return;\n }\n const method = async function (storeName, ...args) {\n // isWrite ? 'readwrite' : undefined gzipps better, but fails in Edge :(\n const tx = this.transaction(storeName, isWrite ? 'readwrite' : 'readonly');\n let target = tx.store;\n if (useIndex)\n target = target.index(args.shift());\n // Must reject if op rejects.\n // If it's a write operation, must reject if tx.done rejects.\n // Must reject with op rejection first.\n // Must resolve with op value.\n // Must handle both promises (no unhandled rejections)\n return (await Promise.all([\n target[targetFuncName](...args),\n isWrite && tx.done,\n ]))[0];\n };\n cachedMethods.set(prop, method);\n return method;\n}\nreplaceTraps((oldTraps) => ({\n ...oldTraps,\n get: (target, prop, receiver) => getMethod(target, prop) || oldTraps.get(target, prop, receiver),\n has: (target, prop) => !!getMethod(target, prop) || oldTraps.has(target, prop),\n}));\n\nexport { deleteDB, openDB };\n","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:expiration:7.2.0'] && _();\n}\ncatch (e) { }\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { openDB, deleteDB } from 'idb';\nimport '../_version.js';\nconst DB_NAME = 'workbox-expiration';\nconst CACHE_OBJECT_STORE = 'cache-entries';\nconst normalizeURL = (unNormalizedUrl) => {\n const url = new URL(unNormalizedUrl, location.href);\n url.hash = '';\n return url.href;\n};\n/**\n * Returns the timestamp model.\n *\n * @private\n */\nclass CacheTimestampsModel {\n /**\n *\n * @param {string} cacheName\n *\n * @private\n */\n constructor(cacheName) {\n this._db = null;\n this._cacheName = cacheName;\n }\n /**\n * Performs an upgrade of indexedDB.\n *\n * @param {IDBPDatabase} db\n *\n * @private\n */\n _upgradeDb(db) {\n // TODO(philipwalton): EdgeHTML doesn't support arrays as a keyPath, so we\n // have to use the `id` keyPath here and create our own values (a\n // concatenation of `url + cacheName`) instead of simply using\n // `keyPath: ['url', 'cacheName']`, which is supported in other browsers.\n const objStore = db.createObjectStore(CACHE_OBJECT_STORE, { keyPath: 'id' });\n // TODO(philipwalton): once we don't have to support EdgeHTML, we can\n // create a single index with the keyPath `['cacheName', 'timestamp']`\n // instead of doing both these indexes.\n objStore.createIndex('cacheName', 'cacheName', { unique: false });\n objStore.createIndex('timestamp', 'timestamp', { unique: false });\n }\n /**\n * Performs an upgrade of indexedDB and deletes deprecated DBs.\n *\n * @param {IDBPDatabase} db\n *\n * @private\n */\n _upgradeDbAndDeleteOldDbs(db) {\n this._upgradeDb(db);\n if (this._cacheName) {\n void deleteDB(this._cacheName);\n }\n }\n /**\n * @param {string} url\n * @param {number} timestamp\n *\n * @private\n */\n async setTimestamp(url, timestamp) {\n url = normalizeURL(url);\n const entry = {\n url,\n timestamp,\n cacheName: this._cacheName,\n // Creating an ID from the URL and cache name won't be necessary once\n // Edge switches to Chromium and all browsers we support work with\n // array keyPaths.\n id: this._getId(url),\n };\n const db = await this.getDb();\n const tx = db.transaction(CACHE_OBJECT_STORE, 'readwrite', {\n durability: 'relaxed',\n });\n await tx.store.put(entry);\n await tx.done;\n }\n /**\n * Returns the timestamp stored for a given URL.\n *\n * @param {string} url\n * @return {number | undefined}\n *\n * @private\n */\n async getTimestamp(url) {\n const db = await this.getDb();\n const entry = await db.get(CACHE_OBJECT_STORE, this._getId(url));\n return entry === null || entry === void 0 ? void 0 : entry.timestamp;\n }\n /**\n * Iterates through all the entries in the object store (from newest to\n * oldest) and removes entries once either `maxCount` is reached or the\n * entry's timestamp is less than `minTimestamp`.\n *\n * @param {number} minTimestamp\n * @param {number} maxCount\n * @return {Array}\n *\n * @private\n */\n async expireEntries(minTimestamp, maxCount) {\n const db = await this.getDb();\n let cursor = await db\n .transaction(CACHE_OBJECT_STORE)\n .store.index('timestamp')\n .openCursor(null, 'prev');\n const entriesToDelete = [];\n let entriesNotDeletedCount = 0;\n while (cursor) {\n const result = cursor.value;\n // TODO(philipwalton): once we can use a multi-key index, we\n // won't have to check `cacheName` here.\n if (result.cacheName === this._cacheName) {\n // Delete an entry if it's older than the max age or\n // if we already have the max number allowed.\n if ((minTimestamp && result.timestamp < minTimestamp) ||\n (maxCount && entriesNotDeletedCount >= maxCount)) {\n // TODO(philipwalton): we should be able to delete the\n // entry right here, but doing so causes an iteration\n // bug in Safari stable (fixed in TP). Instead we can\n // store the keys of the entries to delete, and then\n // delete the separate transactions.\n // https://github.com/GoogleChrome/workbox/issues/1978\n // cursor.delete();\n // We only need to return the URL, not the whole entry.\n entriesToDelete.push(cursor.value);\n }\n else {\n entriesNotDeletedCount++;\n }\n }\n cursor = await cursor.continue();\n }\n // TODO(philipwalton): once the Safari bug in the following issue is fixed,\n // we should be able to remove this loop and do the entry deletion in the\n // cursor loop above:\n // https://github.com/GoogleChrome/workbox/issues/1978\n const urlsDeleted = [];\n for (const entry of entriesToDelete) {\n await db.delete(CACHE_OBJECT_STORE, entry.id);\n urlsDeleted.push(entry.url);\n }\n return urlsDeleted;\n }\n /**\n * Takes a URL and returns an ID that will be unique in the object store.\n *\n * @param {string} url\n * @return {string}\n *\n * @private\n */\n _getId(url) {\n // Creating an ID from the URL and cache name won't be necessary once\n // Edge switches to Chromium and all browsers we support work with\n // array keyPaths.\n return this._cacheName + '|' + normalizeURL(url);\n }\n /**\n * Returns an open connection to the database.\n *\n * @private\n */\n async getDb() {\n if (!this._db) {\n this._db = await openDB(DB_NAME, 1, {\n upgrade: this._upgradeDbAndDeleteOldDbs.bind(this),\n });\n }\n return this._db;\n }\n}\nexport { CacheTimestampsModel };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { dontWaitFor } from 'workbox-core/_private/dontWaitFor.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { CacheTimestampsModel } from './models/CacheTimestampsModel.js';\nimport './_version.js';\n/**\n * The `CacheExpiration` class allows you define an expiration and / or\n * limit on the number of responses stored in a\n * [`Cache`](https://developer.mozilla.org/en-US/docs/Web/API/Cache).\n *\n * @memberof workbox-expiration\n */\nclass CacheExpiration {\n /**\n * To construct a new CacheExpiration instance you must provide at least\n * one of the `config` properties.\n *\n * @param {string} cacheName Name of the cache to apply restrictions to.\n * @param {Object} config\n * @param {number} [config.maxEntries] The maximum number of entries to cache.\n * Entries used the least will be removed as the maximum is reached.\n * @param {number} [config.maxAgeSeconds] The maximum age of an entry before\n * it's treated as stale and removed.\n * @param {Object} [config.matchOptions] The [`CacheQueryOptions`](https://developer.mozilla.org/en-US/docs/Web/API/Cache/delete#Parameters)\n * that will be used when calling `delete()` on the cache.\n */\n constructor(cacheName, config = {}) {\n this._isRunning = false;\n this._rerunRequested = false;\n if (process.env.NODE_ENV !== 'production') {\n assert.isType(cacheName, 'string', {\n moduleName: 'workbox-expiration',\n className: 'CacheExpiration',\n funcName: 'constructor',\n paramName: 'cacheName',\n });\n if (!(config.maxEntries || config.maxAgeSeconds)) {\n throw new WorkboxError('max-entries-or-age-required', {\n moduleName: 'workbox-expiration',\n className: 'CacheExpiration',\n funcName: 'constructor',\n });\n }\n if (config.maxEntries) {\n assert.isType(config.maxEntries, 'number', {\n moduleName: 'workbox-expiration',\n className: 'CacheExpiration',\n funcName: 'constructor',\n paramName: 'config.maxEntries',\n });\n }\n if (config.maxAgeSeconds) {\n assert.isType(config.maxAgeSeconds, 'number', {\n moduleName: 'workbox-expiration',\n className: 'CacheExpiration',\n funcName: 'constructor',\n paramName: 'config.maxAgeSeconds',\n });\n }\n }\n this._maxEntries = config.maxEntries;\n this._maxAgeSeconds = config.maxAgeSeconds;\n this._matchOptions = config.matchOptions;\n this._cacheName = cacheName;\n this._timestampModel = new CacheTimestampsModel(cacheName);\n }\n /**\n * Expires entries for the given cache and given criteria.\n */\n async expireEntries() {\n if (this._isRunning) {\n this._rerunRequested = true;\n return;\n }\n this._isRunning = true;\n const minTimestamp = this._maxAgeSeconds\n ? Date.now() - this._maxAgeSeconds * 1000\n : 0;\n const urlsExpired = await this._timestampModel.expireEntries(minTimestamp, this._maxEntries);\n // Delete URLs from the cache\n const cache = await self.caches.open(this._cacheName);\n for (const url of urlsExpired) {\n await cache.delete(url, this._matchOptions);\n }\n if (process.env.NODE_ENV !== 'production') {\n if (urlsExpired.length > 0) {\n logger.groupCollapsed(`Expired ${urlsExpired.length} ` +\n `${urlsExpired.length === 1 ? 'entry' : 'entries'} and removed ` +\n `${urlsExpired.length === 1 ? 'it' : 'them'} from the ` +\n `'${this._cacheName}' cache.`);\n logger.log(`Expired the following ${urlsExpired.length === 1 ? 'URL' : 'URLs'}:`);\n urlsExpired.forEach((url) => logger.log(` ${url}`));\n logger.groupEnd();\n }\n else {\n logger.debug(`Cache expiration ran and found no entries to remove.`);\n }\n }\n this._isRunning = false;\n if (this._rerunRequested) {\n this._rerunRequested = false;\n dontWaitFor(this.expireEntries());\n }\n }\n /**\n * Update the timestamp for the given URL. This ensures the when\n * removing entries based on maximum entries, most recently used\n * is accurate or when expiring, the timestamp is up-to-date.\n *\n * @param {string} url\n */\n async updateTimestamp(url) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isType(url, 'string', {\n moduleName: 'workbox-expiration',\n className: 'CacheExpiration',\n funcName: 'updateTimestamp',\n paramName: 'url',\n });\n }\n await this._timestampModel.setTimestamp(url, Date.now());\n }\n /**\n * Can be used to check if a URL has expired or not before it's used.\n *\n * This requires a look up from IndexedDB, so can be slow.\n *\n * Note: This method will not remove the cached entry, call\n * `expireEntries()` to remove indexedDB and Cache entries.\n *\n * @param {string} url\n * @return {boolean}\n */\n async isURLExpired(url) {\n if (!this._maxAgeSeconds) {\n if (process.env.NODE_ENV !== 'production') {\n throw new WorkboxError(`expired-test-without-max-age`, {\n methodName: 'isURLExpired',\n paramName: 'maxAgeSeconds',\n });\n }\n return false;\n }\n else {\n const timestamp = await this._timestampModel.getTimestamp(url);\n const expireOlderThan = Date.now() - this._maxAgeSeconds * 1000;\n return timestamp !== undefined ? timestamp < expireOlderThan : true;\n }\n }\n /**\n * Removes the IndexedDB object store used to keep track of cache expiration\n * metadata.\n */\n async delete() {\n // Make sure we don't attempt another rerun if we're called in the middle of\n // a cache expiration.\n this._rerunRequested = false;\n await this._timestampModel.expireEntries(Infinity); // Expires all.\n }\n}\nexport { CacheExpiration };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { cacheNames } from 'workbox-core/_private/cacheNames.js';\nimport { dontWaitFor } from 'workbox-core/_private/dontWaitFor.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { registerQuotaErrorCallback } from 'workbox-core/registerQuotaErrorCallback.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { CacheExpiration } from './CacheExpiration.js';\nimport './_version.js';\n/**\n * This plugin can be used in a `workbox-strategy` to regularly enforce a\n * limit on the age and / or the number of cached requests.\n *\n * It can only be used with `workbox-strategy` instances that have a\n * [custom `cacheName` property set](/web/tools/workbox/guides/configure-workbox#custom_cache_names_in_strategies).\n * In other words, it can't be used to expire entries in strategy that uses the\n * default runtime cache name.\n *\n * Whenever a cached response is used or updated, this plugin will look\n * at the associated cache and remove any old or extra responses.\n *\n * When using `maxAgeSeconds`, responses may be used *once* after expiring\n * because the expiration clean up will not have occurred until *after* the\n * cached response has been used. If the response has a \"Date\" header, then\n * a light weight expiration check is performed and the response will not be\n * used immediately.\n *\n * When using `maxEntries`, the entry least-recently requested will be removed\n * from the cache first.\n *\n * @memberof workbox-expiration\n */\nclass ExpirationPlugin {\n /**\n * @param {ExpirationPluginOptions} config\n * @param {number} [config.maxEntries] The maximum number of entries to cache.\n * Entries used the least will be removed as the maximum is reached.\n * @param {number} [config.maxAgeSeconds] The maximum age of an entry before\n * it's treated as stale and removed.\n * @param {Object} [config.matchOptions] The [`CacheQueryOptions`](https://developer.mozilla.org/en-US/docs/Web/API/Cache/delete#Parameters)\n * that will be used when calling `delete()` on the cache.\n * @param {boolean} [config.purgeOnQuotaError] Whether to opt this cache in to\n * automatic deletion if the available storage quota has been exceeded.\n */\n constructor(config = {}) {\n /**\n * A \"lifecycle\" callback that will be triggered automatically by the\n * `workbox-strategies` handlers when a `Response` is about to be returned\n * from a [Cache](https://developer.mozilla.org/en-US/docs/Web/API/Cache) to\n * the handler. It allows the `Response` to be inspected for freshness and\n * prevents it from being used if the `Response`'s `Date` header value is\n * older than the configured `maxAgeSeconds`.\n *\n * @param {Object} options\n * @param {string} options.cacheName Name of the cache the response is in.\n * @param {Response} options.cachedResponse The `Response` object that's been\n * read from a cache and whose freshness should be checked.\n * @return {Response} Either the `cachedResponse`, if it's\n * fresh, or `null` if the `Response` is older than `maxAgeSeconds`.\n *\n * @private\n */\n this.cachedResponseWillBeUsed = async ({ event, request, cacheName, cachedResponse, }) => {\n if (!cachedResponse) {\n return null;\n }\n const isFresh = this._isResponseDateFresh(cachedResponse);\n // Expire entries to ensure that even if the expiration date has\n // expired, it'll only be used once.\n const cacheExpiration = this._getCacheExpiration(cacheName);\n dontWaitFor(cacheExpiration.expireEntries());\n // Update the metadata for the request URL to the current timestamp,\n // but don't `await` it as we don't want to block the response.\n const updateTimestampDone = cacheExpiration.updateTimestamp(request.url);\n if (event) {\n try {\n event.waitUntil(updateTimestampDone);\n }\n catch (error) {\n if (process.env.NODE_ENV !== 'production') {\n // The event may not be a fetch event; only log the URL if it is.\n if ('request' in event) {\n logger.warn(`Unable to ensure service worker stays alive when ` +\n `updating cache entry for ` +\n `'${getFriendlyURL(event.request.url)}'.`);\n }\n }\n }\n }\n return isFresh ? cachedResponse : null;\n };\n /**\n * A \"lifecycle\" callback that will be triggered automatically by the\n * `workbox-strategies` handlers when an entry is added to a cache.\n *\n * @param {Object} options\n * @param {string} options.cacheName Name of the cache that was updated.\n * @param {string} options.request The Request for the cached entry.\n *\n * @private\n */\n this.cacheDidUpdate = async ({ cacheName, request, }) => {\n if (process.env.NODE_ENV !== 'production') {\n assert.isType(cacheName, 'string', {\n moduleName: 'workbox-expiration',\n className: 'Plugin',\n funcName: 'cacheDidUpdate',\n paramName: 'cacheName',\n });\n assert.isInstance(request, Request, {\n moduleName: 'workbox-expiration',\n className: 'Plugin',\n funcName: 'cacheDidUpdate',\n paramName: 'request',\n });\n }\n const cacheExpiration = this._getCacheExpiration(cacheName);\n await cacheExpiration.updateTimestamp(request.url);\n await cacheExpiration.expireEntries();\n };\n if (process.env.NODE_ENV !== 'production') {\n if (!(config.maxEntries || config.maxAgeSeconds)) {\n throw new WorkboxError('max-entries-or-age-required', {\n moduleName: 'workbox-expiration',\n className: 'Plugin',\n funcName: 'constructor',\n });\n }\n if (config.maxEntries) {\n assert.isType(config.maxEntries, 'number', {\n moduleName: 'workbox-expiration',\n className: 'Plugin',\n funcName: 'constructor',\n paramName: 'config.maxEntries',\n });\n }\n if (config.maxAgeSeconds) {\n assert.isType(config.maxAgeSeconds, 'number', {\n moduleName: 'workbox-expiration',\n className: 'Plugin',\n funcName: 'constructor',\n paramName: 'config.maxAgeSeconds',\n });\n }\n }\n this._config = config;\n this._maxAgeSeconds = config.maxAgeSeconds;\n this._cacheExpirations = new Map();\n if (config.purgeOnQuotaError) {\n registerQuotaErrorCallback(() => this.deleteCacheAndMetadata());\n }\n }\n /**\n * A simple helper method to return a CacheExpiration instance for a given\n * cache name.\n *\n * @param {string} cacheName\n * @return {CacheExpiration}\n *\n * @private\n */\n _getCacheExpiration(cacheName) {\n if (cacheName === cacheNames.getRuntimeName()) {\n throw new WorkboxError('expire-custom-caches-only');\n }\n let cacheExpiration = this._cacheExpirations.get(cacheName);\n if (!cacheExpiration) {\n cacheExpiration = new CacheExpiration(cacheName, this._config);\n this._cacheExpirations.set(cacheName, cacheExpiration);\n }\n return cacheExpiration;\n }\n /**\n * @param {Response} cachedResponse\n * @return {boolean}\n *\n * @private\n */\n _isResponseDateFresh(cachedResponse) {\n if (!this._maxAgeSeconds) {\n // We aren't expiring by age, so return true, it's fresh\n return true;\n }\n // Check if the 'date' header will suffice a quick expiration check.\n // See https://github.com/GoogleChromeLabs/sw-toolbox/issues/164 for\n // discussion.\n const dateHeaderTimestamp = this._getDateHeaderTimestamp(cachedResponse);\n if (dateHeaderTimestamp === null) {\n // Unable to parse date, so assume it's fresh.\n return true;\n }\n // If we have a valid headerTime, then our response is fresh iff the\n // headerTime plus maxAgeSeconds is greater than the current time.\n const now = Date.now();\n return dateHeaderTimestamp >= now - this._maxAgeSeconds * 1000;\n }\n /**\n * This method will extract the data header and parse it into a useful\n * value.\n *\n * @param {Response} cachedResponse\n * @return {number|null}\n *\n * @private\n */\n _getDateHeaderTimestamp(cachedResponse) {\n if (!cachedResponse.headers.has('date')) {\n return null;\n }\n const dateHeader = cachedResponse.headers.get('date');\n const parsedDate = new Date(dateHeader);\n const headerTime = parsedDate.getTime();\n // If the Date header was invalid for some reason, parsedDate.getTime()\n // will return NaN.\n if (isNaN(headerTime)) {\n return null;\n }\n return headerTime;\n }\n /**\n * This is a helper method that performs two operations:\n *\n * - Deletes *all* the underlying Cache instances associated with this plugin\n * instance, by calling caches.delete() on your behalf.\n * - Deletes the metadata from IndexedDB used to keep track of expiration\n * details for each Cache instance.\n *\n * When using cache expiration, calling this method is preferable to calling\n * `caches.delete()` directly, since this will ensure that the IndexedDB\n * metadata is also cleanly removed and open IndexedDB instances are deleted.\n *\n * Note that if you're *not* using cache expiration for a given cache, calling\n * `caches.delete()` and passing in the cache's name should be sufficient.\n * There is no Workbox-specific method needed for cleanup in that case.\n */\n async deleteCacheAndMetadata() {\n // Do this one at a time instead of all at once via `Promise.all()` to\n // reduce the chance of inconsistency if a promise rejects.\n for (const [cacheName, cacheExpiration] of this._cacheExpirations) {\n await self.caches.delete(cacheName);\n await cacheExpiration.delete();\n }\n // Reset this._cacheExpirations to its initial state.\n this._cacheExpirations = new Map();\n }\n}\nexport { ExpirationPlugin };\n","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:precaching:7.2.0'] && _();\n}\ncatch (e) { }\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport '../_version.js';\n// Name of the search parameter used to store revision info.\nconst REVISION_SEARCH_PARAM = '__WB_REVISION__';\n/**\n * Converts a manifest entry into a versioned URL suitable for precaching.\n *\n * @param {Object|string} entry\n * @return {string} A URL with versioning info.\n *\n * @private\n * @memberof workbox-precaching\n */\nexport function createCacheKey(entry) {\n if (!entry) {\n throw new WorkboxError('add-to-cache-list-unexpected-type', { entry });\n }\n // If a precache manifest entry is a string, it's assumed to be a versioned\n // URL, like '/app.abcd1234.js'. Return as-is.\n if (typeof entry === 'string') {\n const urlObject = new URL(entry, location.href);\n return {\n cacheKey: urlObject.href,\n url: urlObject.href,\n };\n }\n const { revision, url } = entry;\n if (!url) {\n throw new WorkboxError('add-to-cache-list-unexpected-type', { entry });\n }\n // If there's just a URL and no revision, then it's also assumed to be a\n // versioned URL.\n if (!revision) {\n const urlObject = new URL(url, location.href);\n return {\n cacheKey: urlObject.href,\n url: urlObject.href,\n };\n }\n // Otherwise, construct a properly versioned URL using the custom Workbox\n // search parameter along with the revision info.\n const cacheKeyURL = new URL(url, location.href);\n const originalURL = new URL(url, location.href);\n cacheKeyURL.searchParams.set(REVISION_SEARCH_PARAM, revision);\n return {\n cacheKey: cacheKeyURL.href,\n url: originalURL.href,\n };\n}\n","/*\n Copyright 2020 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * A plugin, designed to be used with PrecacheController, to determine the\n * of assets that were updated (or not updated) during the install event.\n *\n * @private\n */\nclass PrecacheInstallReportPlugin {\n constructor() {\n this.updatedURLs = [];\n this.notUpdatedURLs = [];\n this.handlerWillStart = async ({ request, state, }) => {\n // TODO: `state` should never be undefined...\n if (state) {\n state.originalRequest = request;\n }\n };\n this.cachedResponseWillBeUsed = async ({ event, state, cachedResponse, }) => {\n if (event.type === 'install') {\n if (state &&\n state.originalRequest &&\n state.originalRequest instanceof Request) {\n // TODO: `state` should never be undefined...\n const url = state.originalRequest.url;\n if (cachedResponse) {\n this.notUpdatedURLs.push(url);\n }\n else {\n this.updatedURLs.push(url);\n }\n }\n }\n return cachedResponse;\n };\n }\n}\nexport { PrecacheInstallReportPlugin };\n","/*\n Copyright 2020 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * A plugin, designed to be used with PrecacheController, to translate URLs into\n * the corresponding cache key, based on the current revision info.\n *\n * @private\n */\nclass PrecacheCacheKeyPlugin {\n constructor({ precacheController }) {\n this.cacheKeyWillBeUsed = async ({ request, params, }) => {\n // Params is type any, can't change right now.\n /* eslint-disable */\n const cacheKey = (params === null || params === void 0 ? void 0 : params.cacheKey) ||\n this._precacheController.getCacheKeyForURL(request.url);\n /* eslint-enable */\n return cacheKey\n ? new Request(cacheKey, { headers: request.headers })\n : request;\n };\n this._precacheController = precacheController;\n }\n}\nexport { PrecacheCacheKeyPlugin };\n","/*\n Copyright 2020 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { copyResponse } from 'workbox-core/copyResponse.js';\nimport { cacheNames } from 'workbox-core/_private/cacheNames.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { Strategy } from 'workbox-strategies/Strategy.js';\nimport './_version.js';\n/**\n * A {@link workbox-strategies.Strategy} implementation\n * specifically designed to work with\n * {@link workbox-precaching.PrecacheController}\n * to both cache and fetch precached assets.\n *\n * Note: an instance of this class is created automatically when creating a\n * `PrecacheController`; it's generally not necessary to create this yourself.\n *\n * @extends workbox-strategies.Strategy\n * @memberof workbox-precaching\n */\nclass PrecacheStrategy extends Strategy {\n /**\n *\n * @param {Object} [options]\n * @param {string} [options.cacheName] Cache name to store and retrieve\n * requests. Defaults to the cache names provided by\n * {@link workbox-core.cacheNames}.\n * @param {Array} [options.plugins] {@link https://developers.google.com/web/tools/workbox/guides/using-plugins|Plugins}\n * to use in conjunction with this caching strategy.\n * @param {Object} [options.fetchOptions] Values passed along to the\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters|init}\n * of all fetch() requests made by this strategy.\n * @param {Object} [options.matchOptions] The\n * {@link https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions|CacheQueryOptions}\n * for any `cache.match()` or `cache.put()` calls made by this strategy.\n * @param {boolean} [options.fallbackToNetwork=true] Whether to attempt to\n * get the response from the network if there's a precache miss.\n */\n constructor(options = {}) {\n options.cacheName = cacheNames.getPrecacheName(options.cacheName);\n super(options);\n this._fallbackToNetwork =\n options.fallbackToNetwork === false ? false : true;\n // Redirected responses cannot be used to satisfy a navigation request, so\n // any redirected response must be \"copied\" rather than cloned, so the new\n // response doesn't contain the `redirected` flag. See:\n // https://bugs.chromium.org/p/chromium/issues/detail?id=669363&desc=2#c1\n this.plugins.push(PrecacheStrategy.copyRedirectedCacheableResponsesPlugin);\n }\n /**\n * @private\n * @param {Request|string} request A request to run this strategy for.\n * @param {workbox-strategies.StrategyHandler} handler The event that\n * triggered the request.\n * @return {Promise}\n */\n async _handle(request, handler) {\n const response = await handler.cacheMatch(request);\n if (response) {\n return response;\n }\n // If this is an `install` event for an entry that isn't already cached,\n // then populate the cache.\n if (handler.event && handler.event.type === 'install') {\n return await this._handleInstall(request, handler);\n }\n // Getting here means something went wrong. An entry that should have been\n // precached wasn't found in the cache.\n return await this._handleFetch(request, handler);\n }\n async _handleFetch(request, handler) {\n let response;\n const params = (handler.params || {});\n // Fall back to the network if we're configured to do so.\n if (this._fallbackToNetwork) {\n if (process.env.NODE_ENV !== 'production') {\n logger.warn(`The precached response for ` +\n `${getFriendlyURL(request.url)} in ${this.cacheName} was not ` +\n `found. Falling back to the network.`);\n }\n const integrityInManifest = params.integrity;\n const integrityInRequest = request.integrity;\n const noIntegrityConflict = !integrityInRequest || integrityInRequest === integrityInManifest;\n // Do not add integrity if the original request is no-cors\n // See https://github.com/GoogleChrome/workbox/issues/3096\n response = await handler.fetch(new Request(request, {\n integrity: request.mode !== 'no-cors'\n ? integrityInRequest || integrityInManifest\n : undefined,\n }));\n // It's only \"safe\" to repair the cache if we're using SRI to guarantee\n // that the response matches the precache manifest's expectations,\n // and there's either a) no integrity property in the incoming request\n // or b) there is an integrity, and it matches the precache manifest.\n // See https://github.com/GoogleChrome/workbox/issues/2858\n // Also if the original request users no-cors we don't use integrity.\n // See https://github.com/GoogleChrome/workbox/issues/3096\n if (integrityInManifest &&\n noIntegrityConflict &&\n request.mode !== 'no-cors') {\n this._useDefaultCacheabilityPluginIfNeeded();\n const wasCached = await handler.cachePut(request, response.clone());\n if (process.env.NODE_ENV !== 'production') {\n if (wasCached) {\n logger.log(`A response for ${getFriendlyURL(request.url)} ` +\n `was used to \"repair\" the precache.`);\n }\n }\n }\n }\n else {\n // This shouldn't normally happen, but there are edge cases:\n // https://github.com/GoogleChrome/workbox/issues/1441\n throw new WorkboxError('missing-precache-entry', {\n cacheName: this.cacheName,\n url: request.url,\n });\n }\n if (process.env.NODE_ENV !== 'production') {\n const cacheKey = params.cacheKey || (await handler.getCacheKey(request, 'read'));\n // Workbox is going to handle the route.\n // print the routing details to the console.\n logger.groupCollapsed(`Precaching is responding to: ` + getFriendlyURL(request.url));\n logger.log(`Serving the precached url: ${getFriendlyURL(cacheKey instanceof Request ? cacheKey.url : cacheKey)}`);\n logger.groupCollapsed(`View request details here.`);\n logger.log(request);\n logger.groupEnd();\n logger.groupCollapsed(`View response details here.`);\n logger.log(response);\n logger.groupEnd();\n logger.groupEnd();\n }\n return response;\n }\n async _handleInstall(request, handler) {\n this._useDefaultCacheabilityPluginIfNeeded();\n const response = await handler.fetch(request);\n // Make sure we defer cachePut() until after we know the response\n // should be cached; see https://github.com/GoogleChrome/workbox/issues/2737\n const wasCached = await handler.cachePut(request, response.clone());\n if (!wasCached) {\n // Throwing here will lead to the `install` handler failing, which\n // we want to do if *any* of the responses aren't safe to cache.\n throw new WorkboxError('bad-precaching-response', {\n url: request.url,\n status: response.status,\n });\n }\n return response;\n }\n /**\n * This method is complex, as there a number of things to account for:\n *\n * The `plugins` array can be set at construction, and/or it might be added to\n * to at any time before the strategy is used.\n *\n * At the time the strategy is used (i.e. during an `install` event), there\n * needs to be at least one plugin that implements `cacheWillUpdate` in the\n * array, other than `copyRedirectedCacheableResponsesPlugin`.\n *\n * - If this method is called and there are no suitable `cacheWillUpdate`\n * plugins, we need to add `defaultPrecacheCacheabilityPlugin`.\n *\n * - If this method is called and there is exactly one `cacheWillUpdate`, then\n * we don't have to do anything (this might be a previously added\n * `defaultPrecacheCacheabilityPlugin`, or it might be a custom plugin).\n *\n * - If this method is called and there is more than one `cacheWillUpdate`,\n * then we need to check if one is `defaultPrecacheCacheabilityPlugin`. If so,\n * we need to remove it. (This situation is unlikely, but it could happen if\n * the strategy is used multiple times, the first without a `cacheWillUpdate`,\n * and then later on after manually adding a custom `cacheWillUpdate`.)\n *\n * See https://github.com/GoogleChrome/workbox/issues/2737 for more context.\n *\n * @private\n */\n _useDefaultCacheabilityPluginIfNeeded() {\n let defaultPluginIndex = null;\n let cacheWillUpdatePluginCount = 0;\n for (const [index, plugin] of this.plugins.entries()) {\n // Ignore the copy redirected plugin when determining what to do.\n if (plugin === PrecacheStrategy.copyRedirectedCacheableResponsesPlugin) {\n continue;\n }\n // Save the default plugin's index, in case it needs to be removed.\n if (plugin === PrecacheStrategy.defaultPrecacheCacheabilityPlugin) {\n defaultPluginIndex = index;\n }\n if (plugin.cacheWillUpdate) {\n cacheWillUpdatePluginCount++;\n }\n }\n if (cacheWillUpdatePluginCount === 0) {\n this.plugins.push(PrecacheStrategy.defaultPrecacheCacheabilityPlugin);\n }\n else if (cacheWillUpdatePluginCount > 1 && defaultPluginIndex !== null) {\n // Only remove the default plugin; multiple custom plugins are allowed.\n this.plugins.splice(defaultPluginIndex, 1);\n }\n // Nothing needs to be done if cacheWillUpdatePluginCount is 1\n }\n}\nPrecacheStrategy.defaultPrecacheCacheabilityPlugin = {\n async cacheWillUpdate({ response }) {\n if (!response || response.status >= 400) {\n return null;\n }\n return response;\n },\n};\nPrecacheStrategy.copyRedirectedCacheableResponsesPlugin = {\n async cacheWillUpdate({ response }) {\n return response.redirected ? await copyResponse(response) : response;\n },\n};\nexport { PrecacheStrategy };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { cacheNames } from 'workbox-core/_private/cacheNames.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { waitUntil } from 'workbox-core/_private/waitUntil.js';\nimport { createCacheKey } from './utils/createCacheKey.js';\nimport { PrecacheInstallReportPlugin } from './utils/PrecacheInstallReportPlugin.js';\nimport { PrecacheCacheKeyPlugin } from './utils/PrecacheCacheKeyPlugin.js';\nimport { printCleanupDetails } from './utils/printCleanupDetails.js';\nimport { printInstallDetails } from './utils/printInstallDetails.js';\nimport { PrecacheStrategy } from './PrecacheStrategy.js';\nimport './_version.js';\n/**\n * Performs efficient precaching of assets.\n *\n * @memberof workbox-precaching\n */\nclass PrecacheController {\n /**\n * Create a new PrecacheController.\n *\n * @param {Object} [options]\n * @param {string} [options.cacheName] The cache to use for precaching.\n * @param {string} [options.plugins] Plugins to use when precaching as well\n * as responding to fetch events for precached assets.\n * @param {boolean} [options.fallbackToNetwork=true] Whether to attempt to\n * get the response from the network if there's a precache miss.\n */\n constructor({ cacheName, plugins = [], fallbackToNetwork = true, } = {}) {\n this._urlsToCacheKeys = new Map();\n this._urlsToCacheModes = new Map();\n this._cacheKeysToIntegrities = new Map();\n this._strategy = new PrecacheStrategy({\n cacheName: cacheNames.getPrecacheName(cacheName),\n plugins: [\n ...plugins,\n new PrecacheCacheKeyPlugin({ precacheController: this }),\n ],\n fallbackToNetwork,\n });\n // Bind the install and activate methods to the instance.\n this.install = this.install.bind(this);\n this.activate = this.activate.bind(this);\n }\n /**\n * @type {workbox-precaching.PrecacheStrategy} The strategy created by this controller and\n * used to cache assets and respond to fetch events.\n */\n get strategy() {\n return this._strategy;\n }\n /**\n * Adds items to the precache list, removing any duplicates and\n * stores the files in the\n * {@link workbox-core.cacheNames|\"precache cache\"} when the service\n * worker installs.\n *\n * This method can be called multiple times.\n *\n * @param {Array} [entries=[]] Array of entries to precache.\n */\n precache(entries) {\n this.addToCacheList(entries);\n if (!this._installAndActiveListenersAdded) {\n self.addEventListener('install', this.install);\n self.addEventListener('activate', this.activate);\n this._installAndActiveListenersAdded = true;\n }\n }\n /**\n * This method will add items to the precache list, removing duplicates\n * and ensuring the information is valid.\n *\n * @param {Array} entries\n * Array of entries to precache.\n */\n addToCacheList(entries) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isArray(entries, {\n moduleName: 'workbox-precaching',\n className: 'PrecacheController',\n funcName: 'addToCacheList',\n paramName: 'entries',\n });\n }\n const urlsToWarnAbout = [];\n for (const entry of entries) {\n // See https://github.com/GoogleChrome/workbox/issues/2259\n if (typeof entry === 'string') {\n urlsToWarnAbout.push(entry);\n }\n else if (entry && entry.revision === undefined) {\n urlsToWarnAbout.push(entry.url);\n }\n const { cacheKey, url } = createCacheKey(entry);\n const cacheMode = typeof entry !== 'string' && entry.revision ? 'reload' : 'default';\n if (this._urlsToCacheKeys.has(url) &&\n this._urlsToCacheKeys.get(url) !== cacheKey) {\n throw new WorkboxError('add-to-cache-list-conflicting-entries', {\n firstEntry: this._urlsToCacheKeys.get(url),\n secondEntry: cacheKey,\n });\n }\n if (typeof entry !== 'string' && entry.integrity) {\n if (this._cacheKeysToIntegrities.has(cacheKey) &&\n this._cacheKeysToIntegrities.get(cacheKey) !== entry.integrity) {\n throw new WorkboxError('add-to-cache-list-conflicting-integrities', {\n url,\n });\n }\n this._cacheKeysToIntegrities.set(cacheKey, entry.integrity);\n }\n this._urlsToCacheKeys.set(url, cacheKey);\n this._urlsToCacheModes.set(url, cacheMode);\n if (urlsToWarnAbout.length > 0) {\n const warningMessage = `Workbox is precaching URLs without revision ` +\n `info: ${urlsToWarnAbout.join(', ')}\\nThis is generally NOT safe. ` +\n `Learn more at https://bit.ly/wb-precache`;\n if (process.env.NODE_ENV === 'production') {\n // Use console directly to display this warning without bloating\n // bundle sizes by pulling in all of the logger codebase in prod.\n console.warn(warningMessage);\n }\n else {\n logger.warn(warningMessage);\n }\n }\n }\n }\n /**\n * Precaches new and updated assets. Call this method from the service worker\n * install event.\n *\n * Note: this method calls `event.waitUntil()` for you, so you do not need\n * to call it yourself in your event handlers.\n *\n * @param {ExtendableEvent} event\n * @return {Promise}\n */\n install(event) {\n // waitUntil returns Promise\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return waitUntil(event, async () => {\n const installReportPlugin = new PrecacheInstallReportPlugin();\n this.strategy.plugins.push(installReportPlugin);\n // Cache entries one at a time.\n // See https://github.com/GoogleChrome/workbox/issues/2528\n for (const [url, cacheKey] of this._urlsToCacheKeys) {\n const integrity = this._cacheKeysToIntegrities.get(cacheKey);\n const cacheMode = this._urlsToCacheModes.get(url);\n const request = new Request(url, {\n integrity,\n cache: cacheMode,\n credentials: 'same-origin',\n });\n await Promise.all(this.strategy.handleAll({\n params: { cacheKey },\n request,\n event,\n }));\n }\n const { updatedURLs, notUpdatedURLs } = installReportPlugin;\n if (process.env.NODE_ENV !== 'production') {\n printInstallDetails(updatedURLs, notUpdatedURLs);\n }\n return { updatedURLs, notUpdatedURLs };\n });\n }\n /**\n * Deletes assets that are no longer present in the current precache manifest.\n * Call this method from the service worker activate event.\n *\n * Note: this method calls `event.waitUntil()` for you, so you do not need\n * to call it yourself in your event handlers.\n *\n * @param {ExtendableEvent} event\n * @return {Promise}\n */\n activate(event) {\n // waitUntil returns Promise\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return waitUntil(event, async () => {\n const cache = await self.caches.open(this.strategy.cacheName);\n const currentlyCachedRequests = await cache.keys();\n const expectedCacheKeys = new Set(this._urlsToCacheKeys.values());\n const deletedURLs = [];\n for (const request of currentlyCachedRequests) {\n if (!expectedCacheKeys.has(request.url)) {\n await cache.delete(request);\n deletedURLs.push(request.url);\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n printCleanupDetails(deletedURLs);\n }\n return { deletedURLs };\n });\n }\n /**\n * Returns a mapping of a precached URL to the corresponding cache key, taking\n * into account the revision information for the URL.\n *\n * @return {Map} A URL to cache key mapping.\n */\n getURLsToCacheKeys() {\n return this._urlsToCacheKeys;\n }\n /**\n * Returns a list of all the URLs that have been precached by the current\n * service worker.\n *\n * @return {Array} The precached URLs.\n */\n getCachedURLs() {\n return [...this._urlsToCacheKeys.keys()];\n }\n /**\n * Returns the cache key used for storing a given URL. If that URL is\n * unversioned, like `/index.html', then the cache key will be the original\n * URL with a search parameter appended to it.\n *\n * @param {string} url A URL whose cache key you want to look up.\n * @return {string} The versioned URL that corresponds to a cache key\n * for the original URL, or undefined if that URL isn't precached.\n */\n getCacheKeyForURL(url) {\n const urlObject = new URL(url, location.href);\n return this._urlsToCacheKeys.get(urlObject.href);\n }\n /**\n * @param {string} url A cache key whose SRI you want to look up.\n * @return {string} The subresource integrity associated with the cache key,\n * or undefined if it's not set.\n */\n getIntegrityForCacheKey(cacheKey) {\n return this._cacheKeysToIntegrities.get(cacheKey);\n }\n /**\n * This acts as a drop-in replacement for\n * [`cache.match()`](https://developer.mozilla.org/en-US/docs/Web/API/Cache/match)\n * with the following differences:\n *\n * - It knows what the name of the precache is, and only checks in that cache.\n * - It allows you to pass in an \"original\" URL without versioning parameters,\n * and it will automatically look up the correct cache key for the currently\n * active revision of that URL.\n *\n * E.g., `matchPrecache('index.html')` will find the correct precached\n * response for the currently active service worker, even if the actual cache\n * key is `'/index.html?__WB_REVISION__=1234abcd'`.\n *\n * @param {string|Request} request The key (without revisioning parameters)\n * to look up in the precache.\n * @return {Promise}\n */\n async matchPrecache(request) {\n const url = request instanceof Request ? request.url : request;\n const cacheKey = this.getCacheKeyForURL(url);\n if (cacheKey) {\n const cache = await self.caches.open(this.strategy.cacheName);\n return cache.match(cacheKey);\n }\n return undefined;\n }\n /**\n * Returns a function that looks up `url` in the precache (taking into\n * account revision information), and returns the corresponding `Response`.\n *\n * @param {string} url The precached URL which will be used to lookup the\n * `Response`.\n * @return {workbox-routing~handlerCallback}\n */\n createHandlerBoundToURL(url) {\n const cacheKey = this.getCacheKeyForURL(url);\n if (!cacheKey) {\n throw new WorkboxError('non-precached-url', { url });\n }\n return (options) => {\n options.request = new Request(url);\n options.params = Object.assign({ cacheKey }, options.params);\n return this.strategy.handle(options);\n };\n }\n}\nexport { PrecacheController };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { PrecacheController } from '../PrecacheController.js';\nimport '../_version.js';\nlet precacheController;\n/**\n * @return {PrecacheController}\n * @private\n */\nexport const getOrCreatePrecacheController = () => {\n if (!precacheController) {\n precacheController = new PrecacheController();\n }\n return precacheController;\n};\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * Removes any URL search parameters that should be ignored.\n *\n * @param {URL} urlObject The original URL.\n * @param {Array} ignoreURLParametersMatching RegExps to test against\n * each search parameter name. Matches mean that the search parameter should be\n * ignored.\n * @return {URL} The URL with any ignored search parameters removed.\n *\n * @private\n * @memberof workbox-precaching\n */\nexport function removeIgnoredSearchParams(urlObject, ignoreURLParametersMatching = []) {\n // Convert the iterable into an array at the start of the loop to make sure\n // deletion doesn't mess up iteration.\n for (const paramName of [...urlObject.searchParams.keys()]) {\n if (ignoreURLParametersMatching.some((regExp) => regExp.test(paramName))) {\n urlObject.searchParams.delete(paramName);\n }\n }\n return urlObject;\n}\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { removeIgnoredSearchParams } from './removeIgnoredSearchParams.js';\nimport '../_version.js';\n/**\n * Generator function that yields possible variations on the original URL to\n * check, one at a time.\n *\n * @param {string} url\n * @param {Object} options\n *\n * @private\n * @memberof workbox-precaching\n */\nexport function* generateURLVariations(url, { ignoreURLParametersMatching = [/^utm_/, /^fbclid$/], directoryIndex = 'index.html', cleanURLs = true, urlManipulation, } = {}) {\n const urlObject = new URL(url, location.href);\n urlObject.hash = '';\n yield urlObject.href;\n const urlWithoutIgnoredParams = removeIgnoredSearchParams(urlObject, ignoreURLParametersMatching);\n yield urlWithoutIgnoredParams.href;\n if (directoryIndex && urlWithoutIgnoredParams.pathname.endsWith('/')) {\n const directoryURL = new URL(urlWithoutIgnoredParams.href);\n directoryURL.pathname += directoryIndex;\n yield directoryURL.href;\n }\n if (cleanURLs) {\n const cleanURL = new URL(urlWithoutIgnoredParams.href);\n cleanURL.pathname += '.html';\n yield cleanURL.href;\n }\n if (urlManipulation) {\n const additionalURLs = urlManipulation({ url: urlObject });\n for (const urlToAttempt of additionalURLs) {\n yield urlToAttempt.href;\n }\n }\n}\n","/*\n Copyright 2020 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { Route } from 'workbox-routing/Route.js';\nimport { generateURLVariations } from './utils/generateURLVariations.js';\nimport './_version.js';\n/**\n * A subclass of {@link workbox-routing.Route} that takes a\n * {@link workbox-precaching.PrecacheController}\n * instance and uses it to match incoming requests and handle fetching\n * responses from the precache.\n *\n * @memberof workbox-precaching\n * @extends workbox-routing.Route\n */\nclass PrecacheRoute extends Route {\n /**\n * @param {PrecacheController} precacheController A `PrecacheController`\n * instance used to both match requests and respond to fetch events.\n * @param {Object} [options] Options to control how requests are matched\n * against the list of precached URLs.\n * @param {string} [options.directoryIndex=index.html] The `directoryIndex` will\n * check cache entries for a URLs ending with '/' to see if there is a hit when\n * appending the `directoryIndex` value.\n * @param {Array} [options.ignoreURLParametersMatching=[/^utm_/, /^fbclid$/]] An\n * array of regex's to remove search params when looking for a cache match.\n * @param {boolean} [options.cleanURLs=true] The `cleanURLs` option will\n * check the cache for the URL with a `.html` added to the end of the end.\n * @param {workbox-precaching~urlManipulation} [options.urlManipulation]\n * This is a function that should take a URL and return an array of\n * alternative URLs that should be checked for precache matches.\n */\n constructor(precacheController, options) {\n const match = ({ request, }) => {\n const urlsToCacheKeys = precacheController.getURLsToCacheKeys();\n for (const possibleURL of generateURLVariations(request.url, options)) {\n const cacheKey = urlsToCacheKeys.get(possibleURL);\n if (cacheKey) {\n const integrity = precacheController.getIntegrityForCacheKey(cacheKey);\n return { cacheKey, integrity };\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Precaching did not find a match for ` + getFriendlyURL(request.url));\n }\n return;\n };\n super(match, precacheController.strategy);\n }\n}\nexport { PrecacheRoute };\n","/*\n Copyright 2019 Google LLC\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { registerRoute } from 'workbox-routing/registerRoute.js';\nimport { getOrCreatePrecacheController } from './utils/getOrCreatePrecacheController.js';\nimport { PrecacheRoute } from './PrecacheRoute.js';\nimport './_version.js';\n/**\n * Add a `fetch` listener to the service worker that will\n * respond to\n * [network requests]{@link https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers#Custom_responses_to_requests}\n * with precached assets.\n *\n * Requests for assets that aren't precached, the `FetchEvent` will not be\n * responded to, allowing the event to fall through to other `fetch` event\n * listeners.\n *\n * @param {Object} [options] See the {@link workbox-precaching.PrecacheRoute}\n * options.\n *\n * @memberof workbox-precaching\n */\nfunction addRoute(options) {\n const precacheController = getOrCreatePrecacheController();\n const precacheRoute = new PrecacheRoute(precacheController, options);\n registerRoute(precacheRoute);\n}\nexport { addRoute };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { getOrCreatePrecacheController } from './utils/getOrCreatePrecacheController.js';\nimport './_version.js';\n/**\n * Adds items to the precache list, removing any duplicates and\n * stores the files in the\n * {@link workbox-core.cacheNames|\"precache cache\"} when the service\n * worker installs.\n *\n * This method can be called multiple times.\n *\n * Please note: This method **will not** serve any of the cached files for you.\n * It only precaches files. To respond to a network request you call\n * {@link workbox-precaching.addRoute}.\n *\n * If you have a single array of files to precache, you can just call\n * {@link workbox-precaching.precacheAndRoute}.\n *\n * @param {Array} [entries=[]] Array of entries to precache.\n *\n * @memberof workbox-precaching\n */\nfunction precache(entries) {\n const precacheController = getOrCreatePrecacheController();\n precacheController.precache(entries);\n}\nexport { precache };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { addRoute } from './addRoute.js';\nimport { precache } from './precache.js';\nimport './_version.js';\n/**\n * This method will add entries to the precache list and add a route to\n * respond to fetch events.\n *\n * This is a convenience method that will call\n * {@link workbox-precaching.precache} and\n * {@link workbox-precaching.addRoute} in a single call.\n *\n * @param {Array} entries Array of entries to precache.\n * @param {Object} [options] See the\n * {@link workbox-precaching.PrecacheRoute} options.\n *\n * @memberof workbox-precaching\n */\nfunction precacheAndRoute(entries, options) {\n precache(entries);\n addRoute(options);\n}\nexport { precacheAndRoute };\n","/// \n\nimport 'workbox-core';\nimport { registerRoute } from 'workbox-routing';\nimport { StaleWhileRevalidate, CacheFirst } from 'workbox-strategies';\nimport { clientsClaim } from 'workbox-core';\nimport { escapeRegExp } from \"./regex\";\nimport { ExpirationPlugin } from 'workbox-expiration';\nimport { precacheAndRoute } from 'workbox-precaching';\nimport { CONFIG } from \"./config\";\n\ndeclare var self: ServiceWorkerGlobalScope & typeof globalThis;\n\nself.__WB_DISABLE_DEV_LOGS = true\n\nself.addEventListener('install', async (_) => {\n await self.skipWaiting();\n});\n\nclientsClaim();\n\nprecacheAndRoute(self.__WB_MANIFEST);\n\nregisterRoute(\n new RegExp(`^${escapeRegExp(CONFIG.API_BASE)}api\\/.*\\\\.json$`),\n new StaleWhileRevalidate({\n cacheName: 'api-json-cache',\n plugins: [\n new ExpirationPlugin({\n purgeOnQuotaError: true,\n maxAgeSeconds: CONFIG.ASSET_JSON_CACHE_TTL\n }),\n ],\n })\n);\n\nregisterRoute(\n new RegExp(`^${escapeRegExp(CONFIG.API_BASE)}assets\\/.*\\\\.(?:png|jpg|jpeg|svg|webp)$`),\n new CacheFirst({\n cacheName: 'api-assets-cache-v1',\n plugins: [\n new ExpirationPlugin({\n maxAgeSeconds: CONFIG.ASSET_IMAGE_CACHE_TTL,\n purgeOnQuotaError: true,\n }),\n ],\n })\n );"],"names":["error"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50]} \ No newline at end of file diff --git a/_dummy.FC0hjmpd.js b/_dummy.FC0hjmpd.js new file mode 100644 index 0000000..b43f056 --- /dev/null +++ b/_dummy.FC0hjmpd.js @@ -0,0 +1,2 @@ +import{C}from"./assets/config-BSEdrMJ9.js";try{self["workbox:core:7.2.0"]&&_()}catch{}const z=(s,...e)=>{let t=s;return e.length>0&&(t+=` :: ${JSON.stringify(e)}`),t},X=z;class l extends Error{constructor(e,t){const n=X(e,t);super(n),this.name=e,this.details=t}}const F=new Set;function Y(s){F.add(s)}const d={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:typeof registration<"u"?registration.scope:""},D=s=>[d.prefix,s,d.suffix].filter(e=>e&&e.length>0).join("-"),Z=s=>{for(const e of Object.keys(d))s(e)},x={updateDetails:s=>{Z(e=>{typeof s[e]=="string"&&(d[e]=s[e])})},getGoogleAnalyticsName:s=>s||D(d.googleAnalytics),getPrecacheName:s=>s||D(d.precache),getPrefix:()=>d.prefix,getRuntimeName:s=>s||D(d.runtime),getSuffix:()=>d.suffix};function S(s,e){const t=new URL(s);for(const n of e)t.searchParams.delete(n);return t.href}async function ee(s,e,t,n){const a=S(e.url,t);if(e.url===a)return s.match(e,n);const r=Object.assign(Object.assign({},n),{ignoreSearch:!0}),i=await s.keys(e,r);for(const c of i){const o=S(c.url,t);if(a===o)return s.match(c,n)}}let m;function te(){if(m===void 0){const s=new Response("");if("body"in s)try{new Response(s.body),m=!0}catch{m=!1}m=!1}return m}function H(s){s.then(()=>{})}class se{constructor(){this.promise=new Promise((e,t)=>{this.resolve=e,this.reject=t})}}async function ne(){for(const s of F)await s()}const ae=s=>new URL(String(s),location.href).href.replace(new RegExp(`^${location.origin}`),"");function re(s){return new Promise(e=>setTimeout(e,s))}function K(s,e){const t=e();return s.waitUntil(t),t}async function ie(s,e){let t=null;if(s.url&&(t=new URL(s.url).origin),t!==self.location.origin)throw new l("cross-origin-copy-response",{origin:t});const n=s.clone(),r={headers:new Headers(n.headers),status:n.status,statusText:n.statusText},i=te()?n.body:await n.blob();return new Response(i,r)}function ce(){self.addEventListener("activate",()=>self.clients.claim())}try{self["workbox:routing:7.2.0"]&&_()}catch{}const q="GET",E=s=>s&&typeof s=="object"?s:{handle:s};class R{constructor(e,t,n=q){this.handler=E(t),this.match=e,this.method=n}setCatchHandler(e){this.catchHandler=E(e)}}class oe extends R{constructor(e,t,n){const a=({url:r})=>{const i=e.exec(r.href);if(i&&!(r.origin!==location.origin&&i.index!==0))return i.slice(1)};super(a,t,n)}}class he{constructor(){this._routes=new Map,this._defaultHandlerMap=new Map}get routes(){return this._routes}addFetchListener(){self.addEventListener("fetch",e=>{const{request:t}=e,n=this.handleRequest({request:t,event:e});n&&e.respondWith(n)})}addCacheListener(){self.addEventListener("message",e=>{if(e.data&&e.data.type==="CACHE_URLS"){const{payload:t}=e.data,n=Promise.all(t.urlsToCache.map(a=>{typeof a=="string"&&(a=[a]);const r=new Request(...a);return this.handleRequest({request:r,event:e})}));e.waitUntil(n),e.ports&&e.ports[0]&&n.then(()=>e.ports[0].postMessage(!0))}})}handleRequest({request:e,event:t}){const n=new URL(e.url,location.href);if(!n.protocol.startsWith("http"))return;const a=n.origin===location.origin,{params:r,route:i}=this.findMatchingRoute({event:t,request:e,sameOrigin:a,url:n});let c=i&&i.handler;const o=e.method;if(!c&&this._defaultHandlerMap.has(o)&&(c=this._defaultHandlerMap.get(o)),!c)return;let h;try{h=c.handle({url:n,request:e,event:t,params:r})}catch(u){h=Promise.reject(u)}const g=i&&i.catchHandler;return h instanceof Promise&&(this._catchHandler||g)&&(h=h.catch(async u=>{if(g)try{return await g.handle({url:n,request:e,event:t,params:r})}catch(N){N instanceof Error&&(u=N)}if(this._catchHandler)return this._catchHandler.handle({url:n,request:e,event:t});throw u})),h}findMatchingRoute({url:e,sameOrigin:t,request:n,event:a}){const r=this._routes.get(n.method)||[];for(const i of r){let c;const o=i.match({url:e,sameOrigin:t,request:n,event:a});if(o)return c=o,(Array.isArray(c)&&c.length===0||o.constructor===Object&&Object.keys(o).length===0||typeof o=="boolean")&&(c=void 0),{route:i,params:c}}return{}}setDefaultHandler(e,t=q){this._defaultHandlerMap.set(t,E(e))}setCatchHandler(e){this._catchHandler=E(e)}registerRoute(e){this._routes.has(e.method)||this._routes.set(e.method,[]),this._routes.get(e.method).push(e)}unregisterRoute(e){if(!this._routes.has(e.method))throw new l("unregister-route-but-not-found-with-method",{method:e.method});const t=this._routes.get(e.method).indexOf(e);if(t>-1)this._routes.get(e.method).splice(t,1);else throw new l("unregister-route-route-not-registered")}}let w;const le=()=>(w||(w=new he,w.addFetchListener(),w.addCacheListener()),w);function A(s,e,t){let n;if(typeof s=="string"){const r=new URL(s,location.href),i=({url:c})=>c.href===r.href;n=new R(i,e,t)}else if(s instanceof RegExp)n=new oe(s,e,t);else if(typeof s=="function")n=new R(s,e,t);else if(s instanceof R)n=s;else throw new l("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});return le().registerRoute(n),n}try{self["workbox:strategies:7.2.0"]&&_()}catch{}function b(s){return typeof s=="string"?new Request(s):s}class ue{constructor(e,t){this._cacheKeys={},Object.assign(this,t),this.event=t.event,this._strategy=e,this._handlerDeferred=new se,this._extendLifetimePromises=[],this._plugins=[...e.plugins],this._pluginStateMap=new Map;for(const n of this._plugins)this._pluginStateMap.set(n,{});this.event.waitUntil(this._handlerDeferred.promise)}async fetch(e){const{event:t}=this;let n=b(e);if(n.mode==="navigate"&&t instanceof FetchEvent&&t.preloadResponse){const i=await t.preloadResponse;if(i)return i}const a=this.hasCallback("fetchDidFail")?n.clone():null;try{for(const i of this.iterateCallbacks("requestWillFetch"))n=await i({request:n.clone(),event:t})}catch(i){if(i instanceof Error)throw new l("plugin-error-request-will-fetch",{thrownErrorMessage:i.message})}const r=n.clone();try{let i;i=await fetch(n,n.mode==="navigate"?void 0:this._strategy.fetchOptions);for(const c of this.iterateCallbacks("fetchDidSucceed"))i=await c({event:t,request:r,response:i});return i}catch(i){throw a&&await this.runCallbacks("fetchDidFail",{error:i,event:t,originalRequest:a.clone(),request:r.clone()}),i}}async fetchAndCachePut(e){const t=await this.fetch(e),n=t.clone();return this.waitUntil(this.cachePut(e,n)),t}async cacheMatch(e){const t=b(e);let n;const{cacheName:a,matchOptions:r}=this._strategy,i=await this.getCacheKey(t,"read"),c=Object.assign(Object.assign({},r),{cacheName:a});n=await caches.match(i,c);for(const o of this.iterateCallbacks("cachedResponseWillBeUsed"))n=await o({cacheName:a,matchOptions:r,cachedResponse:n,request:i,event:this.event})||void 0;return n}async cachePut(e,t){const n=b(e);await re(0);const a=await this.getCacheKey(n,"write");if(!t)throw new l("cache-put-with-no-response",{url:ae(a.url)});const r=await this._ensureResponseSafeToCache(t);if(!r)return!1;const{cacheName:i,matchOptions:c}=this._strategy,o=await self.caches.open(i),h=this.hasCallback("cacheDidUpdate"),g=h?await ee(o,a.clone(),["__WB_REVISION__"],c):null;try{await o.put(a,h?r.clone():r)}catch(u){if(u instanceof Error)throw u.name==="QuotaExceededError"&&await ne(),u}for(const u of this.iterateCallbacks("cacheDidUpdate"))await u({cacheName:i,oldResponse:g,newResponse:r.clone(),request:a,event:this.event});return!0}async getCacheKey(e,t){const n=`${e.url} | ${t}`;if(!this._cacheKeys[n]){let a=e;for(const r of this.iterateCallbacks("cacheKeyWillBeUsed"))a=b(await r({mode:t,request:a,event:this.event,params:this.params}));this._cacheKeys[n]=a}return this._cacheKeys[n]}hasCallback(e){for(const t of this._strategy.plugins)if(e in t)return!0;return!1}async runCallbacks(e,t){for(const n of this.iterateCallbacks(e))await n(t)}*iterateCallbacks(e){for(const t of this._strategy.plugins)if(typeof t[e]=="function"){const n=this._pluginStateMap.get(t);yield r=>{const i=Object.assign(Object.assign({},r),{state:n});return t[e](i)}}}waitUntil(e){return this._extendLifetimePromises.push(e),e}async doneWaiting(){let e;for(;e=this._extendLifetimePromises.shift();)await e}destroy(){this._handlerDeferred.resolve(null)}async _ensureResponseSafeToCache(e){let t=e,n=!1;for(const a of this.iterateCallbacks("cacheWillUpdate"))if(t=await a({request:this.request,response:t,event:this.event})||void 0,n=!0,!t)break;return n||t&&t.status!==200&&(t=void 0),t}}class v{constructor(e={}){this.cacheName=x.getRuntimeName(e.cacheName),this.plugins=e.plugins||[],this.fetchOptions=e.fetchOptions,this.matchOptions=e.matchOptions}handle(e){const[t]=this.handleAll(e);return t}handleAll(e){e instanceof FetchEvent&&(e={event:e,request:e.request});const t=e.event,n=typeof e.request=="string"?new Request(e.request):e.request,a="params"in e?e.params:void 0,r=new ue(this,{event:t,request:n,params:a}),i=this._getResponse(r,n,t),c=this._awaitComplete(i,r,n,t);return[i,c]}async _getResponse(e,t,n){await e.runCallbacks("handlerWillStart",{event:n,request:t});let a;try{if(a=await this._handle(t,e),!a||a.type==="error")throw new l("no-response",{url:t.url})}catch(r){if(r instanceof Error){for(const i of e.iterateCallbacks("handlerDidError"))if(a=await i({error:r,event:n,request:t}),a)break}if(!a)throw r}for(const r of e.iterateCallbacks("handlerWillRespond"))a=await r({event:n,request:t,response:a});return a}async _awaitComplete(e,t,n,a){let r,i;try{r=await e}catch{}try{await t.runCallbacks("handlerDidRespond",{event:a,request:n,response:r}),await t.doneWaiting()}catch(c){c instanceof Error&&(i=c)}if(await t.runCallbacks("handlerDidComplete",{event:a,request:n,response:r,error:i}),t.destroy(),i)throw i}}class de extends v{async _handle(e,t){let n=await t.cacheMatch(e),a;if(!n)try{n=await t.fetchAndCachePut(e)}catch(r){r instanceof Error&&(a=r)}if(!n)throw new l("no-response",{url:e.url,error:a});return n}}const fe={cacheWillUpdate:async({response:s})=>s.status===200||s.status===0?s:null};class pe extends v{constructor(e={}){super(e),this.plugins.some(t=>"cacheWillUpdate"in t)||this.plugins.unshift(fe)}async _handle(e,t){const n=t.fetchAndCachePut(e).catch(()=>{});t.waitUntil(n);let a=await t.cacheMatch(e),r;if(!a)try{a=await n}catch(i){i instanceof Error&&(r=i)}if(!a)throw new l("no-response",{url:e.url,error:r});return a}}function V(s){return s.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}const ge=(s,e)=>e.some(t=>s instanceof t);let O,B;function me(){return O||(O=[IDBDatabase,IDBObjectStore,IDBIndex,IDBCursor,IDBTransaction])}function we(){return B||(B=[IDBCursor.prototype.advance,IDBCursor.prototype.continue,IDBCursor.prototype.continuePrimaryKey])}const $=new WeakMap,k=new WeakMap,G=new WeakMap,L=new WeakMap,M=new WeakMap;function ye(s){const e=new Promise((t,n)=>{const a=()=>{s.removeEventListener("success",r),s.removeEventListener("error",i)},r=()=>{t(f(s.result)),a()},i=()=>{n(s.error),a()};s.addEventListener("success",r),s.addEventListener("error",i)});return e.then(t=>{t instanceof IDBCursor&&$.set(t,s)}).catch(()=>{}),M.set(e,s),e}function _e(s){if(k.has(s))return;const e=new Promise((t,n)=>{const a=()=>{s.removeEventListener("complete",r),s.removeEventListener("error",i),s.removeEventListener("abort",i)},r=()=>{t(),a()},i=()=>{n(s.error||new DOMException("AbortError","AbortError")),a()};s.addEventListener("complete",r),s.addEventListener("error",i),s.addEventListener("abort",i)});k.set(s,e)}let I={get(s,e,t){if(s instanceof IDBTransaction){if(e==="done")return k.get(s);if(e==="objectStoreNames")return s.objectStoreNames||G.get(s);if(e==="store")return t.objectStoreNames[1]?void 0:t.objectStore(t.objectStoreNames[0])}return f(s[e])},set(s,e,t){return s[e]=t,!0},has(s,e){return s instanceof IDBTransaction&&(e==="done"||e==="store")?!0:e in s}};function Re(s){I=s(I)}function be(s){return s===IDBDatabase.prototype.transaction&&!("objectStoreNames"in IDBTransaction.prototype)?function(e,...t){const n=s.call(U(this),e,...t);return G.set(n,e.sort?e.sort():[e]),f(n)}:we().includes(s)?function(...e){return s.apply(U(this),e),f($.get(this))}:function(...e){return f(s.apply(U(this),e))}}function Ce(s){return typeof s=="function"?be(s):(s instanceof IDBTransaction&&_e(s),ge(s,me())?new Proxy(s,I):s)}function f(s){if(s instanceof IDBRequest)return ye(s);if(L.has(s))return L.get(s);const e=Ce(s);return e!==s&&(L.set(s,e),M.set(e,s)),e}const U=s=>M.get(s);function Ee(s,e,{blocked:t,upgrade:n,blocking:a,terminated:r}={}){const i=indexedDB.open(s,e),c=f(i);return n&&i.addEventListener("upgradeneeded",o=>{n(f(i.result),o.oldVersion,o.newVersion,f(i.transaction),o)}),t&&i.addEventListener("blocked",o=>t(o.oldVersion,o.newVersion,o)),c.then(o=>{r&&o.addEventListener("close",()=>r()),a&&o.addEventListener("versionchange",h=>a(h.oldVersion,h.newVersion,h))}).catch(()=>{}),c}function xe(s,{blocked:e}={}){const t=indexedDB.deleteDatabase(s);return e&&t.addEventListener("blocked",n=>e(n.oldVersion,n)),f(t).then(()=>{})}const De=["get","getKey","getAll","getAllKeys","count"],Le=["put","add","delete","clear"],T=new Map;function W(s,e){if(!(s instanceof IDBDatabase&&!(e in s)&&typeof e=="string"))return;if(T.get(e))return T.get(e);const t=e.replace(/FromIndex$/,""),n=e!==t,a=Le.includes(t);if(!(t in(n?IDBIndex:IDBObjectStore).prototype)||!(a||De.includes(t)))return;const r=async function(i,...c){const o=this.transaction(i,a?"readwrite":"readonly");let h=o.store;return n&&(h=h.index(c.shift())),(await Promise.all([h[t](...c),a&&o.done]))[0]};return T.set(e,r),r}Re(s=>({...s,get:(e,t,n)=>W(e,t)||s.get(e,t,n),has:(e,t)=>!!W(e,t)||s.has(e,t)}));try{self["workbox:expiration:7.2.0"]&&_()}catch{}const Ue="workbox-expiration",y="cache-entries",j=s=>{const e=new URL(s,location.href);return e.hash="",e.href};class Te{constructor(e){this._db=null,this._cacheName=e}_upgradeDb(e){const t=e.createObjectStore(y,{keyPath:"id"});t.createIndex("cacheName","cacheName",{unique:!1}),t.createIndex("timestamp","timestamp",{unique:!1})}_upgradeDbAndDeleteOldDbs(e){this._upgradeDb(e),this._cacheName&&xe(this._cacheName)}async setTimestamp(e,t){e=j(e);const n={url:e,timestamp:t,cacheName:this._cacheName,id:this._getId(e)},r=(await this.getDb()).transaction(y,"readwrite",{durability:"relaxed"});await r.store.put(n),await r.done}async getTimestamp(e){const n=await(await this.getDb()).get(y,this._getId(e));return n?.timestamp}async expireEntries(e,t){const n=await this.getDb();let a=await n.transaction(y).store.index("timestamp").openCursor(null,"prev");const r=[];let i=0;for(;a;){const o=a.value;o.cacheName===this._cacheName&&(e&&o.timestamp=t?r.push(a.value):i++),a=await a.continue()}const c=[];for(const o of r)await n.delete(y,o.id),c.push(o.url);return c}_getId(e){return this._cacheName+"|"+j(e)}async getDb(){return this._db||(this._db=await Ee(Ue,1,{upgrade:this._upgradeDbAndDeleteOldDbs.bind(this)})),this._db}}class Pe{constructor(e,t={}){this._isRunning=!1,this._rerunRequested=!1,this._maxEntries=t.maxEntries,this._maxAgeSeconds=t.maxAgeSeconds,this._matchOptions=t.matchOptions,this._cacheName=e,this._timestampModel=new Te(e)}async expireEntries(){if(this._isRunning){this._rerunRequested=!0;return}this._isRunning=!0;const e=this._maxAgeSeconds?Date.now()-this._maxAgeSeconds*1e3:0,t=await this._timestampModel.expireEntries(e,this._maxEntries),n=await self.caches.open(this._cacheName);for(const a of t)await n.delete(a,this._matchOptions);this._isRunning=!1,this._rerunRequested&&(this._rerunRequested=!1,H(this.expireEntries()))}async updateTimestamp(e){await this._timestampModel.setTimestamp(e,Date.now())}async isURLExpired(e){if(this._maxAgeSeconds){const t=await this._timestampModel.getTimestamp(e),n=Date.now()-this._maxAgeSeconds*1e3;return t!==void 0?t{if(!r)return null;const i=this._isResponseDateFresh(r),c=this._getCacheExpiration(a);H(c.expireEntries());const o=c.updateTimestamp(n.url);if(t)try{t.waitUntil(o)}catch{}return i?r:null},this.cacheDidUpdate=async({cacheName:t,request:n})=>{const a=this._getCacheExpiration(t);await a.updateTimestamp(n.url),await a.expireEntries()},this._config=e,this._maxAgeSeconds=e.maxAgeSeconds,this._cacheExpirations=new Map,e.purgeOnQuotaError&&Y(()=>this.deleteCacheAndMetadata())}_getCacheExpiration(e){if(e===x.getRuntimeName())throw new l("expire-custom-caches-only");let t=this._cacheExpirations.get(e);return t||(t=new Pe(e,this._config),this._cacheExpirations.set(e,t)),t}_isResponseDateFresh(e){if(!this._maxAgeSeconds)return!0;const t=this._getDateHeaderTimestamp(e);if(t===null)return!0;const n=Date.now();return t>=n-this._maxAgeSeconds*1e3}_getDateHeaderTimestamp(e){if(!e.headers.has("date"))return null;const t=e.headers.get("date"),a=new Date(t).getTime();return isNaN(a)?null:a}async deleteCacheAndMetadata(){for(const[e,t]of this._cacheExpirations)await self.caches.delete(e),await t.delete();this._cacheExpirations=new Map}}try{self["workbox:precaching:7.2.0"]&&_()}catch{}const ke="__WB_REVISION__";function Ie(s){if(!s)throw new l("add-to-cache-list-unexpected-type",{entry:s});if(typeof s=="string"){const r=new URL(s,location.href);return{cacheKey:r.href,url:r.href}}const{revision:e,url:t}=s;if(!t)throw new l("add-to-cache-list-unexpected-type",{entry:s});if(!e){const r=new URL(t,location.href);return{cacheKey:r.href,url:r.href}}const n=new URL(t,location.href),a=new URL(t,location.href);return n.searchParams.set(ke,e),{cacheKey:n.href,url:a.href}}class Ae{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:e,state:t})=>{t&&(t.originalRequest=e)},this.cachedResponseWillBeUsed=async({event:e,state:t,cachedResponse:n})=>{if(e.type==="install"&&t&&t.originalRequest&&t.originalRequest instanceof Request){const a=t.originalRequest.url;n?this.notUpdatedURLs.push(a):this.updatedURLs.push(a)}return n}}}class ve{constructor({precacheController:e}){this.cacheKeyWillBeUsed=async({request:t,params:n})=>{const a=n?.cacheKey||this._precacheController.getCacheKeyForURL(t.url);return a?new Request(a,{headers:t.headers}):t},this._precacheController=e}}class p extends v{constructor(e={}){e.cacheName=x.getPrecacheName(e.cacheName),super(e),this._fallbackToNetwork=e.fallbackToNetwork!==!1,this.plugins.push(p.copyRedirectedCacheableResponsesPlugin)}async _handle(e,t){const n=await t.cacheMatch(e);return n||(t.event&&t.event.type==="install"?await this._handleInstall(e,t):await this._handleFetch(e,t))}async _handleFetch(e,t){let n;const a=t.params||{};if(this._fallbackToNetwork){const r=a.integrity,i=e.integrity,c=!i||i===r;n=await t.fetch(new Request(e,{integrity:e.mode!=="no-cors"?i||r:void 0})),r&&c&&e.mode!=="no-cors"&&(this._useDefaultCacheabilityPluginIfNeeded(),await t.cachePut(e,n.clone()))}else throw new l("missing-precache-entry",{cacheName:this.cacheName,url:e.url});return n}async _handleInstall(e,t){this._useDefaultCacheabilityPluginIfNeeded();const n=await t.fetch(e);if(!await t.cachePut(e,n.clone()))throw new l("bad-precaching-response",{url:e.url,status:n.status});return n}_useDefaultCacheabilityPluginIfNeeded(){let e=null,t=0;for(const[n,a]of this.plugins.entries())a!==p.copyRedirectedCacheableResponsesPlugin&&(a===p.defaultPrecacheCacheabilityPlugin&&(e=n),a.cacheWillUpdate&&t++);t===0?this.plugins.push(p.defaultPrecacheCacheabilityPlugin):t>1&&e!==null&&this.plugins.splice(e,1)}}p.defaultPrecacheCacheabilityPlugin={async cacheWillUpdate({response:s}){return!s||s.status>=400?null:s}};p.copyRedirectedCacheableResponsesPlugin={async cacheWillUpdate({response:s}){return s.redirected?await ie(s):s}};class Me{constructor({cacheName:e,plugins:t=[],fallbackToNetwork:n=!0}={}){this._urlsToCacheKeys=new Map,this._urlsToCacheModes=new Map,this._cacheKeysToIntegrities=new Map,this._strategy=new p({cacheName:x.getPrecacheName(e),plugins:[...t,new ve({precacheController:this})],fallbackToNetwork:n}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this._strategy}precache(e){this.addToCacheList(e),this._installAndActiveListenersAdded||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this._installAndActiveListenersAdded=!0)}addToCacheList(e){const t=[];for(const n of e){typeof n=="string"?t.push(n):n&&n.revision===void 0&&t.push(n.url);const{cacheKey:a,url:r}=Ie(n),i=typeof n!="string"&&n.revision?"reload":"default";if(this._urlsToCacheKeys.has(r)&&this._urlsToCacheKeys.get(r)!==a)throw new l("add-to-cache-list-conflicting-entries",{firstEntry:this._urlsToCacheKeys.get(r),secondEntry:a});if(typeof n!="string"&&n.integrity){if(this._cacheKeysToIntegrities.has(a)&&this._cacheKeysToIntegrities.get(a)!==n.integrity)throw new l("add-to-cache-list-conflicting-integrities",{url:r});this._cacheKeysToIntegrities.set(a,n.integrity)}if(this._urlsToCacheKeys.set(r,a),this._urlsToCacheModes.set(r,i),t.length>0){const c=`Workbox is precaching URLs without revision info: ${t.join(", ")} +This is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(c)}}}install(e){return K(e,async()=>{const t=new Ae;this.strategy.plugins.push(t);for(const[r,i]of this._urlsToCacheKeys){const c=this._cacheKeysToIntegrities.get(i),o=this._urlsToCacheModes.get(r),h=new Request(r,{integrity:c,cache:o,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:i},request:h,event:e}))}const{updatedURLs:n,notUpdatedURLs:a}=t;return{updatedURLs:n,notUpdatedURLs:a}})}activate(e){return K(e,async()=>{const t=await self.caches.open(this.strategy.cacheName),n=await t.keys(),a=new Set(this._urlsToCacheKeys.values()),r=[];for(const i of n)a.has(i.url)||(await t.delete(i),r.push(i.url));return{deletedURLs:r}})}getURLsToCacheKeys(){return this._urlsToCacheKeys}getCachedURLs(){return[...this._urlsToCacheKeys.keys()]}getCacheKeyForURL(e){const t=new URL(e,location.href);return this._urlsToCacheKeys.get(t.href)}getIntegrityForCacheKey(e){return this._cacheKeysToIntegrities.get(e)}async matchPrecache(e){const t=e instanceof Request?e.url:e,n=this.getCacheKeyForURL(t);if(n)return(await self.caches.open(this.strategy.cacheName)).match(n)}createHandlerBoundToURL(e){const t=this.getCacheKeyForURL(e);if(!t)throw new l("non-precached-url",{url:e});return n=>(n.request=new Request(e),n.params=Object.assign({cacheKey:t},n.params),this.strategy.handle(n))}}let P;const J=()=>(P||(P=new Me),P);function Ne(s,e=[]){for(const t of[...s.searchParams.keys()])e.some(n=>n.test(t))&&s.searchParams.delete(t);return s}function*Se(s,{ignoreURLParametersMatching:e=[/^utm_/,/^fbclid$/],directoryIndex:t="index.html",cleanURLs:n=!0,urlManipulation:a}={}){const r=new URL(s,location.href);r.hash="",yield r.href;const i=Ne(r,e);if(yield i.href,t&&i.pathname.endsWith("/")){const c=new URL(i.href);c.pathname+=t,yield c.href}if(n){const c=new URL(i.href);c.pathname+=".html",yield c.href}if(a){const c=a({url:r});for(const o of c)yield o.href}}class Ke extends R{constructor(e,t){const n=({request:a})=>{const r=e.getURLsToCacheKeys();for(const i of Se(a.url,t)){const c=r.get(i);if(c){const o=e.getIntegrityForCacheKey(c);return{cacheKey:c,integrity:o}}}};super(n,e.strategy)}}function Oe(s){const e=J(),t=new Ke(e,s);A(t)}function Be(s){J().precache(s)}function We(s,e){Be(s),Oe(e)}self.__WB_DISABLE_DEV_LOGS=!0;self.addEventListener("install",async s=>{await self.skipWaiting()});ce();We(self.__WB_MANIFEST);A(new RegExp(`^${V(C.API_BASE)}api/.*\\.json$`),new pe({cacheName:"api-json-cache",plugins:[new Q({purgeOnQuotaError:!0,maxAgeSeconds:C.ASSET_JSON_CACHE_TTL})]}));A(new RegExp(`^${V(C.API_BASE)}assets/.*\\.(?:png|jpg|jpeg|svg|webp)$`),new de({cacheName:"api-assets-cache-v1",plugins:[new Q({maxAgeSeconds:C.ASSET_IMAGE_CACHE_TTL,purgeOnQuotaError:!0})]})); diff --git a/_service-worker.js b/_service-worker.js index 8b49177..b234fff 100644 --- a/_service-worker.js +++ b/_service-worker.js @@ -1,2774 +1,2 @@ -(function () { - 'use strict'; - - // @ts-ignore - try { - self['workbox:core:7.2.0'] && _(); - } - catch (e) { } - - const logger = null ; - - const fallback = (code, ...args) => { - let msg = code; - if (args.length > 0) { - msg += ` :: ${JSON.stringify(args)}`; - } - return msg; - }; - const messageGenerator = fallback ; - - /* - Copyright 2018 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - /** - * Workbox errors should be thrown with this class. - * This allows use to ensure the type easily in tests, - * helps developers identify errors from workbox - * easily and allows use to optimise error - * messages correctly. - * - * @private - */ - class WorkboxError extends Error { - /** - * - * @param {string} errorCode The error code that - * identifies this particular error. - * @param {Object=} details Any relevant arguments - * that will help developers identify issues should - * be added as a key on the context object. - */ - constructor(errorCode, details) { - const message = messageGenerator(errorCode, details); - super(message); - this.name = errorCode; - this.details = details; - } - } - - /* - Copyright 2018 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - // Callbacks to be executed whenever there's a quota error. - // Can't change Function type right now. - // eslint-disable-next-line @typescript-eslint/ban-types - const quotaErrorCallbacks = new Set(); - - function registerQuotaErrorCallback(callback) { - quotaErrorCallbacks.add(callback); - } - - /* - Copyright 2018 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - const _cacheNameDetails = { - googleAnalytics: 'googleAnalytics', - precache: 'precache-v2', - prefix: 'workbox', - runtime: 'runtime', - suffix: typeof registration !== 'undefined' ? registration.scope : '', - }; - const _createCacheName = (cacheName) => { - return [_cacheNameDetails.prefix, cacheName, _cacheNameDetails.suffix] - .filter((value) => value && value.length > 0) - .join('-'); - }; - const eachCacheNameDetail = (fn) => { - for (const key of Object.keys(_cacheNameDetails)) { - fn(key); - } - }; - const cacheNames = { - updateDetails: (details) => { - eachCacheNameDetail((key) => { - if (typeof details[key] === 'string') { - _cacheNameDetails[key] = details[key]; - } - }); - }, - getGoogleAnalyticsName: (userCacheName) => { - return userCacheName || _createCacheName(_cacheNameDetails.googleAnalytics); - }, - getPrecacheName: (userCacheName) => { - return userCacheName || _createCacheName(_cacheNameDetails.precache); - }, - getPrefix: () => { - return _cacheNameDetails.prefix; - }, - getRuntimeName: (userCacheName) => { - return userCacheName || _createCacheName(_cacheNameDetails.runtime); - }, - getSuffix: () => { - return _cacheNameDetails.suffix; - }, - }; - - /* - Copyright 2020 Google LLC - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - function stripParams(fullURL, ignoreParams) { - const strippedURL = new URL(fullURL); - for (const param of ignoreParams) { - strippedURL.searchParams.delete(param); - } - return strippedURL.href; - } - /** - * Matches an item in the cache, ignoring specific URL params. This is similar - * to the `ignoreSearch` option, but it allows you to ignore just specific - * params (while continuing to match on the others). - * - * @private - * @param {Cache} cache - * @param {Request} request - * @param {Object} matchOptions - * @param {Array} ignoreParams - * @return {Promise} - */ - async function cacheMatchIgnoreParams(cache, request, ignoreParams, matchOptions) { - const strippedRequestURL = stripParams(request.url, ignoreParams); - // If the request doesn't include any ignored params, match as normal. - if (request.url === strippedRequestURL) { - return cache.match(request, matchOptions); - } - // Otherwise, match by comparing keys - const keysOptions = Object.assign(Object.assign({}, matchOptions), { ignoreSearch: true }); - const cacheKeys = await cache.keys(request, keysOptions); - for (const cacheKey of cacheKeys) { - const strippedCacheKeyURL = stripParams(cacheKey.url, ignoreParams); - if (strippedRequestURL === strippedCacheKeyURL) { - return cache.match(cacheKey, matchOptions); - } - } - return; - } - - /* - Copyright 2019 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - let supportStatus; - /** - * A utility function that determines whether the current browser supports - * constructing a new `Response` from a `response.body` stream. - * - * @return {boolean} `true`, if the current browser can successfully - * construct a `Response` from a `response.body` stream, `false` otherwise. - * - * @private - */ - function canConstructResponseFromBodyStream() { - if (supportStatus === undefined) { - const testResponse = new Response(''); - if ('body' in testResponse) { - try { - new Response(testResponse.body); - supportStatus = true; - } - catch (error) { - supportStatus = false; - } - } - supportStatus = false; - } - return supportStatus; - } - - /* - Copyright 2019 Google LLC - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - /** - * A helper function that prevents a promise from being flagged as unused. - * - * @private - **/ - function dontWaitFor(promise) { - // Effective no-op. - void promise.then(() => { }); - } - - /* - Copyright 2018 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - /** - * The Deferred class composes Promises in a way that allows for them to be - * resolved or rejected from outside the constructor. In most cases promises - * should be used directly, but Deferreds can be necessary when the logic to - * resolve a promise must be separate. - * - * @private - */ - class Deferred { - /** - * Creates a promise and exposes its resolve and reject functions as methods. - */ - constructor() { - this.promise = new Promise((resolve, reject) => { - this.resolve = resolve; - this.reject = reject; - }); - } - } - - async function executeQuotaErrorCallbacks() { - for (const callback of quotaErrorCallbacks) { - await callback(); - } - } - - /* - Copyright 2018 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - const getFriendlyURL = (url) => { - const urlObj = new URL(String(url), location.href); - // See https://github.com/GoogleChrome/workbox/issues/2323 - // We want to include everything, except for the origin if it's same-origin. - return urlObj.href.replace(new RegExp(`^${location.origin}`), ''); - }; - - /* - Copyright 2019 Google LLC - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - /** - * Returns a promise that resolves and the passed number of milliseconds. - * This utility is an async/await-friendly version of `setTimeout`. - * - * @param {number} ms - * @return {Promise} - * @private - */ - function timeout(ms) { - return new Promise((resolve) => setTimeout(resolve, ms)); - } - - /* - Copyright 2020 Google LLC - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - /** - * A utility method that makes it easier to use `event.waitUntil` with - * async functions and return the result. - * - * @param {ExtendableEvent} event - * @param {Function} asyncFn - * @return {Function} - * @private - */ - function waitUntil(event, asyncFn) { - const returnPromise = asyncFn(); - event.waitUntil(returnPromise); - return returnPromise; - } - - /* - Copyright 2019 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - /** - * Allows developers to copy a response and modify its `headers`, `status`, - * or `statusText` values (the values settable via a - * [`ResponseInit`]{@link https://developer.mozilla.org/en-US/docs/Web/API/Response/Response#Syntax} - * object in the constructor). - * To modify these values, pass a function as the second argument. That - * function will be invoked with a single object with the response properties - * `{headers, status, statusText}`. The return value of this function will - * be used as the `ResponseInit` for the new `Response`. To change the values - * either modify the passed parameter(s) and return it, or return a totally - * new object. - * - * This method is intentionally limited to same-origin responses, regardless of - * whether CORS was used or not. - * - * @param {Response} response - * @param {Function} modifier - * @memberof workbox-core - */ - async function copyResponse(response, modifier) { - let origin = null; - // If response.url isn't set, assume it's cross-origin and keep origin null. - if (response.url) { - const responseURL = new URL(response.url); - origin = responseURL.origin; - } - if (origin !== self.location.origin) { - throw new WorkboxError('cross-origin-copy-response', { origin }); - } - const clonedResponse = response.clone(); - // Create a fresh `ResponseInit` object by cloning the headers. - const responseInit = { - headers: new Headers(clonedResponse.headers), - status: clonedResponse.status, - statusText: clonedResponse.statusText, - }; - // Apply any user modifications. - const modifiedResponseInit = responseInit; - // Create the new response from the body stream and `ResponseInit` - // modifications. Note: not all browsers support the Response.body stream, - // so fall back to reading the entire body into memory as a blob. - const body = canConstructResponseFromBodyStream() - ? clonedResponse.body - : await clonedResponse.blob(); - return new Response(body, modifiedResponseInit); - } - - /* - Copyright 2019 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - /** - * Claim any currently available clients once the service worker - * becomes active. This is normally used in conjunction with `skipWaiting()`. - * - * @memberof workbox-core - */ - function clientsClaim() { - self.addEventListener('activate', () => self.clients.claim()); - } - - // @ts-ignore - try { - self['workbox:routing:7.2.0'] && _(); - } - catch (e) { } - - /* - Copyright 2018 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - /** - * The default HTTP method, 'GET', used when there's no specific method - * configured for a route. - * - * @type {string} - * - * @private - */ - const defaultMethod = 'GET'; - - const normalizeHandler = (handler) => { - if (handler && typeof handler === "object") { - return handler; - } else { - return { handle: handler }; - } - }; - - class Route { - /** - * Constructor for Route class. - * - * @param {workbox-routing~matchCallback} match - * A callback function that determines whether the route matches a given - * `fetch` event by returning a non-falsy value. - * @param {workbox-routing~handlerCallback} handler A callback - * function that returns a Promise resolving to a Response. - * @param {string} [method='GET'] The HTTP method to match the Route - * against. - */ - constructor(match, handler, method = defaultMethod) { - this.handler = normalizeHandler(handler); - this.match = match; - this.method = method; - } - /** - * - * @param {workbox-routing-handlerCallback} handler A callback - * function that returns a Promise resolving to a Response - */ - setCatchHandler(handler) { - this.catchHandler = normalizeHandler(handler); - } - } - - class RegExpRoute extends Route { - /** - * If the regular expression contains - * [capture groups]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#grouping-back-references}, - * the captured values will be passed to the - * {@link workbox-routing~handlerCallback} `params` - * argument. - * - * @param {RegExp} regExp The regular expression to match against URLs. - * @param {workbox-routing~handlerCallback} handler A callback - * function that returns a Promise resulting in a Response. - * @param {string} [method='GET'] The HTTP method to match the Route - * against. - */ - constructor(regExp, handler, method) { - const match = ({ url }) => { - const result = regExp.exec(url.href); - if (!result) { - return; - } - if (url.origin !== location.origin && result.index !== 0) { - return; - } - return result.slice(1); - }; - super(match, handler, method); - } - } - - class Router { - /** - * Initializes a new Router. - */ - constructor() { - this._routes = /* @__PURE__ */ new Map(); - this._defaultHandlerMap = /* @__PURE__ */ new Map(); - } - /** - * @return {Map>} routes A `Map` of HTTP - * method name ('GET', etc.) to an array of all the corresponding `Route` - * instances that are registered. - */ - get routes() { - return this._routes; - } - /** - * Adds a fetch event listener to respond to events when a route matches - * the event's request. - */ - addFetchListener() { - self.addEventListener("fetch", (event) => { - const { request } = event; - const responsePromise = this.handleRequest({ request, event }); - if (responsePromise) { - event.respondWith(responsePromise); - } - }); - } - /** - * Adds a message event listener for URLs to cache from the window. - * This is useful to cache resources loaded on the page prior to when the - * service worker started controlling it. - * - * The format of the message data sent from the window should be as follows. - * Where the `urlsToCache` array may consist of URL strings or an array of - * URL string + `requestInit` object (the same as you'd pass to `fetch()`). - * - * ``` - * { - * type: 'CACHE_URLS', - * payload: { - * urlsToCache: [ - * './script1.js', - * './script2.js', - * ['./script3.js', {mode: 'no-cors'}], - * ], - * }, - * } - * ``` - */ - addCacheListener() { - self.addEventListener("message", (event) => { - if (event.data && event.data.type === "CACHE_URLS") { - const { payload } = event.data; - const requestPromises = Promise.all(payload.urlsToCache.map((entry) => { - if (typeof entry === "string") { - entry = [entry]; - } - const request = new Request(...entry); - return this.handleRequest({ request, event }); - })); - event.waitUntil(requestPromises); - if (event.ports && event.ports[0]) { - void requestPromises.then(() => event.ports[0].postMessage(true)); - } - } - }); - } - /** - * Apply the routing rules to a FetchEvent object to get a Response from an - * appropriate Route's handler. - * - * @param {Object} options - * @param {Request} options.request The request to handle. - * @param {ExtendableEvent} options.event The event that triggered the - * request. - * @return {Promise|undefined} A promise is returned if a - * registered route can handle the request. If there is no matching - * route and there's no `defaultHandler`, `undefined` is returned. - */ - handleRequest({ request, event }) { - const url = new URL(request.url, location.href); - if (!url.protocol.startsWith("http")) { - return; - } - const sameOrigin = url.origin === location.origin; - const { params, route } = this.findMatchingRoute({ - event, - request, - sameOrigin, - url - }); - let handler = route && route.handler; - const method = request.method; - if (!handler && this._defaultHandlerMap.has(method)) { - handler = this._defaultHandlerMap.get(method); - } - if (!handler) { - return; - } - let responsePromise; - try { - responsePromise = handler.handle({ url, request, event, params }); - } catch (err) { - responsePromise = Promise.reject(err); - } - const catchHandler = route && route.catchHandler; - if (responsePromise instanceof Promise && (this._catchHandler || catchHandler)) { - responsePromise = responsePromise.catch(async (err) => { - if (catchHandler) { - try { - return await catchHandler.handle({ url, request, event, params }); - } catch (catchErr) { - if (catchErr instanceof Error) { - err = catchErr; - } - } - } - if (this._catchHandler) { - return this._catchHandler.handle({ url, request, event }); - } - throw err; - }); - } - return responsePromise; - } - /** - * Checks a request and URL (and optionally an event) against the list of - * registered routes, and if there's a match, returns the corresponding - * route along with any params generated by the match. - * - * @param {Object} options - * @param {URL} options.url - * @param {boolean} options.sameOrigin The result of comparing `url.origin` - * against the current origin. - * @param {Request} options.request The request to match. - * @param {Event} options.event The corresponding event. - * @return {Object} An object with `route` and `params` properties. - * They are populated if a matching route was found or `undefined` - * otherwise. - */ - findMatchingRoute({ url, sameOrigin, request, event }) { - const routes = this._routes.get(request.method) || []; - for (const route of routes) { - let params; - const matchResult = route.match({ url, sameOrigin, request, event }); - if (matchResult) { - params = matchResult; - if (Array.isArray(params) && params.length === 0) { - params = void 0; - } else if (matchResult.constructor === Object && // eslint-disable-line - Object.keys(matchResult).length === 0) { - params = void 0; - } else if (typeof matchResult === "boolean") { - params = void 0; - } - return { route, params }; - } - } - return {}; - } - /** - * Define a default `handler` that's called when no routes explicitly - * match the incoming request. - * - * Each HTTP method ('GET', 'POST', etc.) gets its own default handler. - * - * Without a default handler, unmatched requests will go against the - * network as if there were no service worker present. - * - * @param {workbox-routing~handlerCallback} handler A callback - * function that returns a Promise resulting in a Response. - * @param {string} [method='GET'] The HTTP method to associate with this - * default handler. Each method has its own default. - */ - setDefaultHandler(handler, method = defaultMethod) { - this._defaultHandlerMap.set(method, normalizeHandler(handler)); - } - /** - * If a Route throws an error while handling a request, this `handler` - * will be called and given a chance to provide a response. - * - * @param {workbox-routing~handlerCallback} handler A callback - * function that returns a Promise resulting in a Response. - */ - setCatchHandler(handler) { - this._catchHandler = normalizeHandler(handler); - } - /** - * Registers a route with the router. - * - * @param {workbox-routing.Route} route The route to register. - */ - registerRoute(route) { - if (!this._routes.has(route.method)) { - this._routes.set(route.method, []); - } - this._routes.get(route.method).push(route); - } - /** - * Unregisters a route with the router. - * - * @param {workbox-routing.Route} route The route to unregister. - */ - unregisterRoute(route) { - if (!this._routes.has(route.method)) { - throw new WorkboxError("unregister-route-but-not-found-with-method", { - method: route.method - }); - } - const routeIndex = this._routes.get(route.method).indexOf(route); - if (routeIndex > -1) { - this._routes.get(route.method).splice(routeIndex, 1); - } else { - throw new WorkboxError("unregister-route-route-not-registered"); - } - } - } - - /* - Copyright 2019 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - let defaultRouter; - /** - * Creates a new, singleton Router instance if one does not exist. If one - * does already exist, that instance is returned. - * - * @private - * @return {Router} - */ - const getOrCreateDefaultRouter = () => { - if (!defaultRouter) { - defaultRouter = new Router(); - // The helpers that use the default Router assume these listeners exist. - defaultRouter.addFetchListener(); - defaultRouter.addCacheListener(); - } - return defaultRouter; - }; - - function registerRoute(capture, handler, method) { - let route; - if (typeof capture === "string") { - const captureUrl = new URL(capture, location.href); - const matchCallback = ({ url }) => { - return url.href === captureUrl.href; - }; - route = new Route(matchCallback, handler, method); - } else if (capture instanceof RegExp) { - route = new RegExpRoute(capture, handler, method); - } else if (typeof capture === "function") { - route = new Route(capture, handler, method); - } else if (capture instanceof Route) { - route = capture; - } else { - throw new WorkboxError("unsupported-route-type", { - moduleName: "workbox-routing", - funcName: "registerRoute", - paramName: "capture" - }); - } - const defaultRouter = getOrCreateDefaultRouter(); - defaultRouter.registerRoute(route); - return route; - } - - // @ts-ignore - try { - self['workbox:strategies:7.2.0'] && _(); - } - catch (e) { } - - function toRequest(input) { - return typeof input === "string" ? new Request(input) : input; - } - class StrategyHandler { - /** - * Creates a new instance associated with the passed strategy and event - * that's handling the request. - * - * The constructor also initializes the state that will be passed to each of - * the plugins handling this request. - * - * @param {workbox-strategies.Strategy} strategy - * @param {Object} options - * @param {Request|string} options.request A request to run this strategy for. - * @param {ExtendableEvent} options.event The event associated with the - * request. - * @param {URL} [options.url] - * @param {*} [options.params] The return value from the - * {@link workbox-routing~matchCallback} (if applicable). - */ - constructor(strategy, options) { - this._cacheKeys = {}; - Object.assign(this, options); - this.event = options.event; - this._strategy = strategy; - this._handlerDeferred = new Deferred(); - this._extendLifetimePromises = []; - this._plugins = [...strategy.plugins]; - this._pluginStateMap = /* @__PURE__ */ new Map(); - for (const plugin of this._plugins) { - this._pluginStateMap.set(plugin, {}); - } - this.event.waitUntil(this._handlerDeferred.promise); - } - /** - * Fetches a given request (and invokes any applicable plugin callback - * methods) using the `fetchOptions` (for non-navigation requests) and - * `plugins` defined on the `Strategy` object. - * - * The following plugin lifecycle methods are invoked when using this method: - * - `requestWillFetch()` - * - `fetchDidSucceed()` - * - `fetchDidFail()` - * - * @param {Request|string} input The URL or request to fetch. - * @return {Promise} - */ - async fetch(input) { - const { event } = this; - let request = toRequest(input); - if (request.mode === "navigate" && event instanceof FetchEvent && event.preloadResponse) { - const possiblePreloadResponse = await event.preloadResponse; - if (possiblePreloadResponse) { - return possiblePreloadResponse; - } - } - const originalRequest = this.hasCallback("fetchDidFail") ? request.clone() : null; - try { - for (const cb of this.iterateCallbacks("requestWillFetch")) { - request = await cb({ request: request.clone(), event }); - } - } catch (err) { - if (err instanceof Error) { - throw new WorkboxError("plugin-error-request-will-fetch", { - thrownErrorMessage: err.message - }); - } - } - const pluginFilteredRequest = request.clone(); - try { - let fetchResponse; - fetchResponse = await fetch(request, request.mode === "navigate" ? void 0 : this._strategy.fetchOptions); - if (false) ; - for (const callback of this.iterateCallbacks("fetchDidSucceed")) { - fetchResponse = await callback({ - event, - request: pluginFilteredRequest, - response: fetchResponse - }); - } - return fetchResponse; - } catch (error) { - if (originalRequest) { - await this.runCallbacks("fetchDidFail", { - error, - event, - originalRequest: originalRequest.clone(), - request: pluginFilteredRequest.clone() - }); - } - throw error; - } - } - /** - * Calls `this.fetch()` and (in the background) runs `this.cachePut()` on - * the response generated by `this.fetch()`. - * - * The call to `this.cachePut()` automatically invokes `this.waitUntil()`, - * so you do not have to manually call `waitUntil()` on the event. - * - * @param {Request|string} input The request or URL to fetch and cache. - * @return {Promise} - */ - async fetchAndCachePut(input) { - const response = await this.fetch(input); - const responseClone = response.clone(); - void this.waitUntil(this.cachePut(input, responseClone)); - return response; - } - /** - * Matches a request from the cache (and invokes any applicable plugin - * callback methods) using the `cacheName`, `matchOptions`, and `plugins` - * defined on the strategy object. - * - * The following plugin lifecycle methods are invoked when using this method: - * - cacheKeyWillBeUsed() - * - cachedResponseWillBeUsed() - * - * @param {Request|string} key The Request or URL to use as the cache key. - * @return {Promise} A matching response, if found. - */ - async cacheMatch(key) { - const request = toRequest(key); - let cachedResponse; - const { cacheName, matchOptions } = this._strategy; - const effectiveRequest = await this.getCacheKey(request, "read"); - const multiMatchOptions = Object.assign(Object.assign({}, matchOptions), { cacheName }); - cachedResponse = await caches.match(effectiveRequest, multiMatchOptions); - for (const callback of this.iterateCallbacks("cachedResponseWillBeUsed")) { - cachedResponse = await callback({ - cacheName, - matchOptions, - cachedResponse, - request: effectiveRequest, - event: this.event - }) || void 0; - } - return cachedResponse; - } - /** - * Puts a request/response pair in the cache (and invokes any applicable - * plugin callback methods) using the `cacheName` and `plugins` defined on - * the strategy object. - * - * The following plugin lifecycle methods are invoked when using this method: - * - cacheKeyWillBeUsed() - * - cacheWillUpdate() - * - cacheDidUpdate() - * - * @param {Request|string} key The request or URL to use as the cache key. - * @param {Response} response The response to cache. - * @return {Promise} `false` if a cacheWillUpdate caused the response - * not be cached, and `true` otherwise. - */ - async cachePut(key, response) { - const request = toRequest(key); - await timeout(0); - const effectiveRequest = await this.getCacheKey(request, "write"); - if (!response) { - throw new WorkboxError("cache-put-with-no-response", { - url: getFriendlyURL(effectiveRequest.url) - }); - } - const responseToCache = await this._ensureResponseSafeToCache(response); - if (!responseToCache) { - return false; - } - const { cacheName, matchOptions } = this._strategy; - const cache = await self.caches.open(cacheName); - const hasCacheUpdateCallback = this.hasCallback("cacheDidUpdate"); - const oldResponse = hasCacheUpdateCallback ? await cacheMatchIgnoreParams( - // TODO(philipwalton): the `__WB_REVISION__` param is a precaching - // feature. Consider into ways to only add this behavior if using - // precaching. - cache, - effectiveRequest.clone(), - ["__WB_REVISION__"], - matchOptions - ) : null; - try { - await cache.put(effectiveRequest, hasCacheUpdateCallback ? responseToCache.clone() : responseToCache); - } catch (error) { - if (error instanceof Error) { - if (error.name === "QuotaExceededError") { - await executeQuotaErrorCallbacks(); - } - throw error; - } - } - for (const callback of this.iterateCallbacks("cacheDidUpdate")) { - await callback({ - cacheName, - oldResponse, - newResponse: responseToCache.clone(), - request: effectiveRequest, - event: this.event - }); - } - return true; - } - /** - * Checks the list of plugins for the `cacheKeyWillBeUsed` callback, and - * executes any of those callbacks found in sequence. The final `Request` - * object returned by the last plugin is treated as the cache key for cache - * reads and/or writes. If no `cacheKeyWillBeUsed` plugin callbacks have - * been registered, the passed request is returned unmodified - * - * @param {Request} request - * @param {string} mode - * @return {Promise} - */ - async getCacheKey(request, mode) { - const key = `${request.url} | ${mode}`; - if (!this._cacheKeys[key]) { - let effectiveRequest = request; - for (const callback of this.iterateCallbacks("cacheKeyWillBeUsed")) { - effectiveRequest = toRequest(await callback({ - mode, - request: effectiveRequest, - event: this.event, - // params has a type any can't change right now. - params: this.params - // eslint-disable-line - })); - } - this._cacheKeys[key] = effectiveRequest; - } - return this._cacheKeys[key]; - } - /** - * Returns true if the strategy has at least one plugin with the given - * callback. - * - * @param {string} name The name of the callback to check for. - * @return {boolean} - */ - hasCallback(name) { - for (const plugin of this._strategy.plugins) { - if (name in plugin) { - return true; - } - } - return false; - } - /** - * Runs all plugin callbacks matching the given name, in order, passing the - * given param object (merged ith the current plugin state) as the only - * argument. - * - * Note: since this method runs all plugins, it's not suitable for cases - * where the return value of a callback needs to be applied prior to calling - * the next callback. See - * {@link workbox-strategies.StrategyHandler#iterateCallbacks} - * below for how to handle that case. - * - * @param {string} name The name of the callback to run within each plugin. - * @param {Object} param The object to pass as the first (and only) param - * when executing each callback. This object will be merged with the - * current plugin state prior to callback execution. - */ - async runCallbacks(name, param) { - for (const callback of this.iterateCallbacks(name)) { - await callback(param); - } - } - /** - * Accepts a callback and returns an iterable of matching plugin callbacks, - * where each callback is wrapped with the current handler state (i.e. when - * you call each callback, whatever object parameter you pass it will - * be merged with the plugin's current state). - * - * @param {string} name The name fo the callback to run - * @return {Array} - */ - *iterateCallbacks(name) { - for (const plugin of this._strategy.plugins) { - if (typeof plugin[name] === "function") { - const state = this._pluginStateMap.get(plugin); - const statefulCallback = (param) => { - const statefulParam = Object.assign(Object.assign({}, param), { state }); - return plugin[name](statefulParam); - }; - yield statefulCallback; - } - } - } - /** - * Adds a promise to the - * [extend lifetime promises]{@link https://w3c.github.io/ServiceWorker/#extendableevent-extend-lifetime-promises} - * of the event event associated with the request being handled (usually a - * `FetchEvent`). - * - * Note: you can await - * {@link workbox-strategies.StrategyHandler~doneWaiting} - * to know when all added promises have settled. - * - * @param {Promise} promise A promise to add to the extend lifetime promises - * of the event that triggered the request. - */ - waitUntil(promise) { - this._extendLifetimePromises.push(promise); - return promise; - } - /** - * Returns a promise that resolves once all promises passed to - * {@link workbox-strategies.StrategyHandler~waitUntil} - * have settled. - * - * Note: any work done after `doneWaiting()` settles should be manually - * passed to an event's `waitUntil()` method (not this handler's - * `waitUntil()` method), otherwise the service worker thread my be killed - * prior to your work completing. - */ - async doneWaiting() { - let promise; - while (promise = this._extendLifetimePromises.shift()) { - await promise; - } - } - /** - * Stops running the strategy and immediately resolves any pending - * `waitUntil()` promises. - */ - destroy() { - this._handlerDeferred.resolve(null); - } - /** - * This method will call cacheWillUpdate on the available plugins (or use - * status === 200) to determine if the Response is safe and valid to cache. - * - * @param {Request} options.request - * @param {Response} options.response - * @return {Promise} - * - * @private - */ - async _ensureResponseSafeToCache(response) { - let responseToCache = response; - let pluginsUsed = false; - for (const callback of this.iterateCallbacks("cacheWillUpdate")) { - responseToCache = await callback({ - request: this.request, - response: responseToCache, - event: this.event - }) || void 0; - pluginsUsed = true; - if (!responseToCache) { - break; - } - } - if (!pluginsUsed) { - if (responseToCache && responseToCache.status !== 200) { - responseToCache = void 0; - } - } - return responseToCache; - } - } - - class Strategy { - /** - * Creates a new instance of the strategy and sets all documented option - * properties as public instance properties. - * - * Note: if a custom strategy class extends the base Strategy class and does - * not need more than these properties, it does not need to define its own - * constructor. - * - * @param {Object} [options] - * @param {string} [options.cacheName] Cache name to store and retrieve - * requests. Defaults to the cache names provided by - * {@link workbox-core.cacheNames}. - * @param {Array} [options.plugins] [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins} - * to use in conjunction with this caching strategy. - * @param {Object} [options.fetchOptions] Values passed along to the - * [`init`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters) - * of [non-navigation](https://github.com/GoogleChrome/workbox/issues/1796) - * `fetch()` requests made by this strategy. - * @param {Object} [options.matchOptions] The - * [`CacheQueryOptions`]{@link https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions} - * for any `cache.match()` or `cache.put()` calls made by this strategy. - */ - constructor(options = {}) { - this.cacheName = cacheNames.getRuntimeName(options.cacheName); - this.plugins = options.plugins || []; - this.fetchOptions = options.fetchOptions; - this.matchOptions = options.matchOptions; - } - /** - * Perform a request strategy and returns a `Promise` that will resolve with - * a `Response`, invoking all relevant plugin callbacks. - * - * When a strategy instance is registered with a Workbox - * {@link workbox-routing.Route}, this method is automatically - * called when the route matches. - * - * Alternatively, this method can be used in a standalone `FetchEvent` - * listener by passing it to `event.respondWith()`. - * - * @param {FetchEvent|Object} options A `FetchEvent` or an object with the - * properties listed below. - * @param {Request|string} options.request A request to run this strategy for. - * @param {ExtendableEvent} options.event The event associated with the - * request. - * @param {URL} [options.url] - * @param {*} [options.params] - */ - handle(options) { - const [responseDone] = this.handleAll(options); - return responseDone; - } - /** - * Similar to {@link workbox-strategies.Strategy~handle}, but - * instead of just returning a `Promise` that resolves to a `Response` it - * it will return an tuple of `[response, done]` promises, where the former - * (`response`) is equivalent to what `handle()` returns, and the latter is a - * Promise that will resolve once any promises that were added to - * `event.waitUntil()` as part of performing the strategy have completed. - * - * You can await the `done` promise to ensure any extra work performed by - * the strategy (usually caching responses) completes successfully. - * - * @param {FetchEvent|Object} options A `FetchEvent` or an object with the - * properties listed below. - * @param {Request|string} options.request A request to run this strategy for. - * @param {ExtendableEvent} options.event The event associated with the - * request. - * @param {URL} [options.url] - * @param {*} [options.params] - * @return {Array} A tuple of [response, done] - * promises that can be used to determine when the response resolves as - * well as when the handler has completed all its work. - */ - handleAll(options) { - if (options instanceof FetchEvent) { - options = { - event: options, - request: options.request - }; - } - const event = options.event; - const request = typeof options.request === "string" ? new Request(options.request) : options.request; - const params = "params" in options ? options.params : void 0; - const handler = new StrategyHandler(this, { event, request, params }); - const responseDone = this._getResponse(handler, request, event); - const handlerDone = this._awaitComplete(responseDone, handler, request, event); - return [responseDone, handlerDone]; - } - async _getResponse(handler, request, event) { - await handler.runCallbacks("handlerWillStart", { event, request }); - let response = void 0; - try { - response = await this._handle(request, handler); - if (!response || response.type === "error") { - throw new WorkboxError("no-response", { url: request.url }); - } - } catch (error) { - if (error instanceof Error) { - for (const callback of handler.iterateCallbacks("handlerDidError")) { - response = await callback({ error, event, request }); - if (response) { - break; - } - } - } - if (!response) { - throw error; - } - } - for (const callback of handler.iterateCallbacks("handlerWillRespond")) { - response = await callback({ event, request, response }); - } - return response; - } - async _awaitComplete(responseDone, handler, request, event) { - let response; - let error; - try { - response = await responseDone; - } catch (error2) { - } - try { - await handler.runCallbacks("handlerDidRespond", { - event, - request, - response - }); - await handler.doneWaiting(); - } catch (waitUntilError) { - if (waitUntilError instanceof Error) { - error = waitUntilError; - } - } - await handler.runCallbacks("handlerDidComplete", { - event, - request, - response, - error - }); - handler.destroy(); - if (error) { - throw error; - } - } - } - - class CacheFirst extends Strategy { - /** - * @private - * @param {Request|string} request A request to run this strategy for. - * @param {workbox-strategies.StrategyHandler} handler The event that - * triggered the request. - * @return {Promise} - */ - async _handle(request, handler) { - let response = await handler.cacheMatch(request); - let error = void 0; - if (!response) { - try { - response = await handler.fetchAndCachePut(request); - } catch (err) { - if (err instanceof Error) { - error = err; - } - } - } - if (!response) { - throw new WorkboxError("no-response", { url: request.url, error }); - } - return response; - } - } - - /* - Copyright 2018 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - const cacheOkAndOpaquePlugin = { - /** - * Returns a valid response (to allow caching) if the status is 200 (OK) or - * 0 (opaque). - * - * @param {Object} options - * @param {Response} options.response - * @return {Response|null} - * - * @private - */ - cacheWillUpdate: async ({ response }) => { - if (response.status === 200 || response.status === 0) { - return response; - } - return null; - }, - }; - - class StaleWhileRevalidate extends Strategy { - /** - * @param {Object} [options] - * @param {string} [options.cacheName] Cache name to store and retrieve - * requests. Defaults to cache names provided by - * {@link workbox-core.cacheNames}. - * @param {Array} [options.plugins] [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins} - * to use in conjunction with this caching strategy. - * @param {Object} [options.fetchOptions] Values passed along to the - * [`init`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters) - * of [non-navigation](https://github.com/GoogleChrome/workbox/issues/1796) - * `fetch()` requests made by this strategy. - * @param {Object} [options.matchOptions] [`CacheQueryOptions`](https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions) - */ - constructor(options = {}) { - super(options); - if (!this.plugins.some((p) => "cacheWillUpdate" in p)) { - this.plugins.unshift(cacheOkAndOpaquePlugin); - } - } - /** - * @private - * @param {Request|string} request A request to run this strategy for. - * @param {workbox-strategies.StrategyHandler} handler The event that - * triggered the request. - * @return {Promise} - */ - async _handle(request, handler) { - const fetchAndCachePromise = handler.fetchAndCachePut(request).catch(() => { - }); - void handler.waitUntil(fetchAndCachePromise); - let response = await handler.cacheMatch(request); - let error; - if (response) ; else { - try { - response = await fetchAndCachePromise; - } catch (err) { - if (err instanceof Error) { - error = err; - } - } - } - if (!response) { - throw new WorkboxError("no-response", { url: request.url, error }); - } - return response; - } - } - - function escapeRegExp(value) { - return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); - } - - const instanceOfAny = (object, constructors) => constructors.some((c) => object instanceof c); - - let idbProxyableTypes; - let cursorAdvanceMethods; - // This is a function to prevent it throwing up in node environments. - function getIdbProxyableTypes() { - return (idbProxyableTypes || - (idbProxyableTypes = [ - IDBDatabase, - IDBObjectStore, - IDBIndex, - IDBCursor, - IDBTransaction, - ])); - } - // This is a function to prevent it throwing up in node environments. - function getCursorAdvanceMethods() { - return (cursorAdvanceMethods || - (cursorAdvanceMethods = [ - IDBCursor.prototype.advance, - IDBCursor.prototype.continue, - IDBCursor.prototype.continuePrimaryKey, - ])); - } - const cursorRequestMap = new WeakMap(); - const transactionDoneMap = new WeakMap(); - const transactionStoreNamesMap = new WeakMap(); - const transformCache = new WeakMap(); - const reverseTransformCache = new WeakMap(); - function promisifyRequest(request) { - const promise = new Promise((resolve, reject) => { - const unlisten = () => { - request.removeEventListener('success', success); - request.removeEventListener('error', error); - }; - const success = () => { - resolve(wrap(request.result)); - unlisten(); - }; - const error = () => { - reject(request.error); - unlisten(); - }; - request.addEventListener('success', success); - request.addEventListener('error', error); - }); - promise - .then((value) => { - // Since cursoring reuses the IDBRequest (*sigh*), we cache it for later retrieval - // (see wrapFunction). - if (value instanceof IDBCursor) { - cursorRequestMap.set(value, request); - } - // Catching to avoid "Uncaught Promise exceptions" - }) - .catch(() => { }); - // This mapping exists in reverseTransformCache but doesn't doesn't exist in transformCache. This - // is because we create many promises from a single IDBRequest. - reverseTransformCache.set(promise, request); - return promise; - } - function cacheDonePromiseForTransaction(tx) { - // Early bail if we've already created a done promise for this transaction. - if (transactionDoneMap.has(tx)) - return; - const done = new Promise((resolve, reject) => { - const unlisten = () => { - tx.removeEventListener('complete', complete); - tx.removeEventListener('error', error); - tx.removeEventListener('abort', error); - }; - const complete = () => { - resolve(); - unlisten(); - }; - const error = () => { - reject(tx.error || new DOMException('AbortError', 'AbortError')); - unlisten(); - }; - tx.addEventListener('complete', complete); - tx.addEventListener('error', error); - tx.addEventListener('abort', error); - }); - // Cache it for later retrieval. - transactionDoneMap.set(tx, done); - } - let idbProxyTraps = { - get(target, prop, receiver) { - if (target instanceof IDBTransaction) { - // Special handling for transaction.done. - if (prop === 'done') - return transactionDoneMap.get(target); - // Polyfill for objectStoreNames because of Edge. - if (prop === 'objectStoreNames') { - return target.objectStoreNames || transactionStoreNamesMap.get(target); - } - // Make tx.store return the only store in the transaction, or undefined if there are many. - if (prop === 'store') { - return receiver.objectStoreNames[1] - ? undefined - : receiver.objectStore(receiver.objectStoreNames[0]); - } - } - // Else transform whatever we get back. - return wrap(target[prop]); - }, - set(target, prop, value) { - target[prop] = value; - return true; - }, - has(target, prop) { - if (target instanceof IDBTransaction && - (prop === 'done' || prop === 'store')) { - return true; - } - return prop in target; - }, - }; - function replaceTraps(callback) { - idbProxyTraps = callback(idbProxyTraps); - } - function wrapFunction(func) { - // Due to expected object equality (which is enforced by the caching in `wrap`), we - // only create one new func per func. - // Edge doesn't support objectStoreNames (booo), so we polyfill it here. - if (func === IDBDatabase.prototype.transaction && - !('objectStoreNames' in IDBTransaction.prototype)) { - return function (storeNames, ...args) { - const tx = func.call(unwrap(this), storeNames, ...args); - transactionStoreNamesMap.set(tx, storeNames.sort ? storeNames.sort() : [storeNames]); - return wrap(tx); - }; - } - // Cursor methods are special, as the behaviour is a little more different to standard IDB. In - // IDB, you advance the cursor and wait for a new 'success' on the IDBRequest that gave you the - // cursor. It's kinda like a promise that can resolve with many values. That doesn't make sense - // with real promises, so each advance methods returns a new promise for the cursor object, or - // undefined if the end of the cursor has been reached. - if (getCursorAdvanceMethods().includes(func)) { - return function (...args) { - // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use - // the original object. - func.apply(unwrap(this), args); - return wrap(cursorRequestMap.get(this)); - }; - } - return function (...args) { - // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use - // the original object. - return wrap(func.apply(unwrap(this), args)); - }; - } - function transformCachableValue(value) { - if (typeof value === 'function') - return wrapFunction(value); - // This doesn't return, it just creates a 'done' promise for the transaction, - // which is later returned for transaction.done (see idbObjectHandler). - if (value instanceof IDBTransaction) - cacheDonePromiseForTransaction(value); - if (instanceOfAny(value, getIdbProxyableTypes())) - return new Proxy(value, idbProxyTraps); - // Return the same value back if we're not going to transform it. - return value; - } - function wrap(value) { - // We sometimes generate multiple promises from a single IDBRequest (eg when cursoring), because - // IDB is weird and a single IDBRequest can yield many responses, so these can't be cached. - if (value instanceof IDBRequest) - return promisifyRequest(value); - // If we've already transformed this value before, reuse the transformed value. - // This is faster, but it also provides object equality. - if (transformCache.has(value)) - return transformCache.get(value); - const newValue = transformCachableValue(value); - // Not all types are transformed. - // These may be primitive types, so they can't be WeakMap keys. - if (newValue !== value) { - transformCache.set(value, newValue); - reverseTransformCache.set(newValue, value); - } - return newValue; - } - const unwrap = (value) => reverseTransformCache.get(value); - - /** - * Open a database. - * - * @param name Name of the database. - * @param version Schema version. - * @param callbacks Additional callbacks. - */ - function openDB(name, version, { blocked, upgrade, blocking, terminated } = {}) { - const request = indexedDB.open(name, version); - const openPromise = wrap(request); - if (upgrade) { - request.addEventListener('upgradeneeded', (event) => { - upgrade(wrap(request.result), event.oldVersion, event.newVersion, wrap(request.transaction), event); - }); - } - if (blocked) { - request.addEventListener('blocked', (event) => blocked( - // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405 - event.oldVersion, event.newVersion, event)); - } - openPromise - .then((db) => { - if (terminated) - db.addEventListener('close', () => terminated()); - if (blocking) { - db.addEventListener('versionchange', (event) => blocking(event.oldVersion, event.newVersion, event)); - } - }) - .catch(() => { }); - return openPromise; - } - /** - * Delete a database. - * - * @param name Name of the database. - */ - function deleteDB(name, { blocked } = {}) { - const request = indexedDB.deleteDatabase(name); - if (blocked) { - request.addEventListener('blocked', (event) => blocked( - // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405 - event.oldVersion, event)); - } - return wrap(request).then(() => undefined); - } - - const readMethods = ['get', 'getKey', 'getAll', 'getAllKeys', 'count']; - const writeMethods = ['put', 'add', 'delete', 'clear']; - const cachedMethods = new Map(); - function getMethod(target, prop) { - if (!(target instanceof IDBDatabase && - !(prop in target) && - typeof prop === 'string')) { - return; - } - if (cachedMethods.get(prop)) - return cachedMethods.get(prop); - const targetFuncName = prop.replace(/FromIndex$/, ''); - const useIndex = prop !== targetFuncName; - const isWrite = writeMethods.includes(targetFuncName); - if ( - // Bail if the target doesn't exist on the target. Eg, getAll isn't in Edge. - !(targetFuncName in (useIndex ? IDBIndex : IDBObjectStore).prototype) || - !(isWrite || readMethods.includes(targetFuncName))) { - return; - } - const method = async function (storeName, ...args) { - // isWrite ? 'readwrite' : undefined gzipps better, but fails in Edge :( - const tx = this.transaction(storeName, isWrite ? 'readwrite' : 'readonly'); - let target = tx.store; - if (useIndex) - target = target.index(args.shift()); - // Must reject if op rejects. - // If it's a write operation, must reject if tx.done rejects. - // Must reject with op rejection first. - // Must resolve with op value. - // Must handle both promises (no unhandled rejections) - return (await Promise.all([ - target[targetFuncName](...args), - isWrite && tx.done, - ]))[0]; - }; - cachedMethods.set(prop, method); - return method; - } - replaceTraps((oldTraps) => ({ - ...oldTraps, - get: (target, prop, receiver) => getMethod(target, prop) || oldTraps.get(target, prop, receiver), - has: (target, prop) => !!getMethod(target, prop) || oldTraps.has(target, prop), - })); - - // @ts-ignore - try { - self['workbox:expiration:7.2.0'] && _(); - } - catch (e) { } - - /* - Copyright 2018 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - const DB_NAME = 'workbox-expiration'; - const CACHE_OBJECT_STORE = 'cache-entries'; - const normalizeURL = (unNormalizedUrl) => { - const url = new URL(unNormalizedUrl, location.href); - url.hash = ''; - return url.href; - }; - /** - * Returns the timestamp model. - * - * @private - */ - class CacheTimestampsModel { - /** - * - * @param {string} cacheName - * - * @private - */ - constructor(cacheName) { - this._db = null; - this._cacheName = cacheName; - } - /** - * Performs an upgrade of indexedDB. - * - * @param {IDBPDatabase} db - * - * @private - */ - _upgradeDb(db) { - // TODO(philipwalton): EdgeHTML doesn't support arrays as a keyPath, so we - // have to use the `id` keyPath here and create our own values (a - // concatenation of `url + cacheName`) instead of simply using - // `keyPath: ['url', 'cacheName']`, which is supported in other browsers. - const objStore = db.createObjectStore(CACHE_OBJECT_STORE, { keyPath: 'id' }); - // TODO(philipwalton): once we don't have to support EdgeHTML, we can - // create a single index with the keyPath `['cacheName', 'timestamp']` - // instead of doing both these indexes. - objStore.createIndex('cacheName', 'cacheName', { unique: false }); - objStore.createIndex('timestamp', 'timestamp', { unique: false }); - } - /** - * Performs an upgrade of indexedDB and deletes deprecated DBs. - * - * @param {IDBPDatabase} db - * - * @private - */ - _upgradeDbAndDeleteOldDbs(db) { - this._upgradeDb(db); - if (this._cacheName) { - void deleteDB(this._cacheName); - } - } - /** - * @param {string} url - * @param {number} timestamp - * - * @private - */ - async setTimestamp(url, timestamp) { - url = normalizeURL(url); - const entry = { - url, - timestamp, - cacheName: this._cacheName, - // Creating an ID from the URL and cache name won't be necessary once - // Edge switches to Chromium and all browsers we support work with - // array keyPaths. - id: this._getId(url), - }; - const db = await this.getDb(); - const tx = db.transaction(CACHE_OBJECT_STORE, 'readwrite', { - durability: 'relaxed', - }); - await tx.store.put(entry); - await tx.done; - } - /** - * Returns the timestamp stored for a given URL. - * - * @param {string} url - * @return {number | undefined} - * - * @private - */ - async getTimestamp(url) { - const db = await this.getDb(); - const entry = await db.get(CACHE_OBJECT_STORE, this._getId(url)); - return entry === null || entry === void 0 ? void 0 : entry.timestamp; - } - /** - * Iterates through all the entries in the object store (from newest to - * oldest) and removes entries once either `maxCount` is reached or the - * entry's timestamp is less than `minTimestamp`. - * - * @param {number} minTimestamp - * @param {number} maxCount - * @return {Array} - * - * @private - */ - async expireEntries(minTimestamp, maxCount) { - const db = await this.getDb(); - let cursor = await db - .transaction(CACHE_OBJECT_STORE) - .store.index('timestamp') - .openCursor(null, 'prev'); - const entriesToDelete = []; - let entriesNotDeletedCount = 0; - while (cursor) { - const result = cursor.value; - // TODO(philipwalton): once we can use a multi-key index, we - // won't have to check `cacheName` here. - if (result.cacheName === this._cacheName) { - // Delete an entry if it's older than the max age or - // if we already have the max number allowed. - if ((minTimestamp && result.timestamp < minTimestamp) || - (maxCount && entriesNotDeletedCount >= maxCount)) { - // TODO(philipwalton): we should be able to delete the - // entry right here, but doing so causes an iteration - // bug in Safari stable (fixed in TP). Instead we can - // store the keys of the entries to delete, and then - // delete the separate transactions. - // https://github.com/GoogleChrome/workbox/issues/1978 - // cursor.delete(); - // We only need to return the URL, not the whole entry. - entriesToDelete.push(cursor.value); - } - else { - entriesNotDeletedCount++; - } - } - cursor = await cursor.continue(); - } - // TODO(philipwalton): once the Safari bug in the following issue is fixed, - // we should be able to remove this loop and do the entry deletion in the - // cursor loop above: - // https://github.com/GoogleChrome/workbox/issues/1978 - const urlsDeleted = []; - for (const entry of entriesToDelete) { - await db.delete(CACHE_OBJECT_STORE, entry.id); - urlsDeleted.push(entry.url); - } - return urlsDeleted; - } - /** - * Takes a URL and returns an ID that will be unique in the object store. - * - * @param {string} url - * @return {string} - * - * @private - */ - _getId(url) { - // Creating an ID from the URL and cache name won't be necessary once - // Edge switches to Chromium and all browsers we support work with - // array keyPaths. - return this._cacheName + '|' + normalizeURL(url); - } - /** - * Returns an open connection to the database. - * - * @private - */ - async getDb() { - if (!this._db) { - this._db = await openDB(DB_NAME, 1, { - upgrade: this._upgradeDbAndDeleteOldDbs.bind(this), - }); - } - return this._db; - } - } - - class CacheExpiration { - /** - * To construct a new CacheExpiration instance you must provide at least - * one of the `config` properties. - * - * @param {string} cacheName Name of the cache to apply restrictions to. - * @param {Object} config - * @param {number} [config.maxEntries] The maximum number of entries to cache. - * Entries used the least will be removed as the maximum is reached. - * @param {number} [config.maxAgeSeconds] The maximum age of an entry before - * it's treated as stale and removed. - * @param {Object} [config.matchOptions] The [`CacheQueryOptions`](https://developer.mozilla.org/en-US/docs/Web/API/Cache/delete#Parameters) - * that will be used when calling `delete()` on the cache. - */ - constructor(cacheName, config = {}) { - this._isRunning = false; - this._rerunRequested = false; - this._maxEntries = config.maxEntries; - this._maxAgeSeconds = config.maxAgeSeconds; - this._matchOptions = config.matchOptions; - this._cacheName = cacheName; - this._timestampModel = new CacheTimestampsModel(cacheName); - } - /** - * Expires entries for the given cache and given criteria. - */ - async expireEntries() { - if (this._isRunning) { - this._rerunRequested = true; - return; - } - this._isRunning = true; - const minTimestamp = this._maxAgeSeconds ? Date.now() - this._maxAgeSeconds * 1e3 : 0; - const urlsExpired = await this._timestampModel.expireEntries(minTimestamp, this._maxEntries); - const cache = await self.caches.open(this._cacheName); - for (const url of urlsExpired) { - await cache.delete(url, this._matchOptions); - } - this._isRunning = false; - if (this._rerunRequested) { - this._rerunRequested = false; - dontWaitFor(this.expireEntries()); - } - } - /** - * Update the timestamp for the given URL. This ensures the when - * removing entries based on maximum entries, most recently used - * is accurate or when expiring, the timestamp is up-to-date. - * - * @param {string} url - */ - async updateTimestamp(url) { - await this._timestampModel.setTimestamp(url, Date.now()); - } - /** - * Can be used to check if a URL has expired or not before it's used. - * - * This requires a look up from IndexedDB, so can be slow. - * - * Note: This method will not remove the cached entry, call - * `expireEntries()` to remove indexedDB and Cache entries. - * - * @param {string} url - * @return {boolean} - */ - async isURLExpired(url) { - if (!this._maxAgeSeconds) { - return false; - } else { - const timestamp = await this._timestampModel.getTimestamp(url); - const expireOlderThan = Date.now() - this._maxAgeSeconds * 1e3; - return timestamp !== void 0 ? timestamp < expireOlderThan : true; - } - } - /** - * Removes the IndexedDB object store used to keep track of cache expiration - * metadata. - */ - async delete() { - this._rerunRequested = false; - await this._timestampModel.expireEntries(Infinity); - } - } - - class ExpirationPlugin { - /** - * @param {ExpirationPluginOptions} config - * @param {number} [config.maxEntries] The maximum number of entries to cache. - * Entries used the least will be removed as the maximum is reached. - * @param {number} [config.maxAgeSeconds] The maximum age of an entry before - * it's treated as stale and removed. - * @param {Object} [config.matchOptions] The [`CacheQueryOptions`](https://developer.mozilla.org/en-US/docs/Web/API/Cache/delete#Parameters) - * that will be used when calling `delete()` on the cache. - * @param {boolean} [config.purgeOnQuotaError] Whether to opt this cache in to - * automatic deletion if the available storage quota has been exceeded. - */ - constructor(config = {}) { - this.cachedResponseWillBeUsed = async ({ event, request, cacheName, cachedResponse }) => { - if (!cachedResponse) { - return null; - } - const isFresh = this._isResponseDateFresh(cachedResponse); - const cacheExpiration = this._getCacheExpiration(cacheName); - dontWaitFor(cacheExpiration.expireEntries()); - const updateTimestampDone = cacheExpiration.updateTimestamp(request.url); - if (event) { - try { - event.waitUntil(updateTimestampDone); - } catch (error) { - } - } - return isFresh ? cachedResponse : null; - }; - this.cacheDidUpdate = async ({ cacheName, request }) => { - const cacheExpiration = this._getCacheExpiration(cacheName); - await cacheExpiration.updateTimestamp(request.url); - await cacheExpiration.expireEntries(); - }; - this._config = config; - this._maxAgeSeconds = config.maxAgeSeconds; - this._cacheExpirations = /* @__PURE__ */ new Map(); - if (config.purgeOnQuotaError) { - registerQuotaErrorCallback(() => this.deleteCacheAndMetadata()); - } - } - /** - * A simple helper method to return a CacheExpiration instance for a given - * cache name. - * - * @param {string} cacheName - * @return {CacheExpiration} - * - * @private - */ - _getCacheExpiration(cacheName) { - if (cacheName === cacheNames.getRuntimeName()) { - throw new WorkboxError("expire-custom-caches-only"); - } - let cacheExpiration = this._cacheExpirations.get(cacheName); - if (!cacheExpiration) { - cacheExpiration = new CacheExpiration(cacheName, this._config); - this._cacheExpirations.set(cacheName, cacheExpiration); - } - return cacheExpiration; - } - /** - * @param {Response} cachedResponse - * @return {boolean} - * - * @private - */ - _isResponseDateFresh(cachedResponse) { - if (!this._maxAgeSeconds) { - return true; - } - const dateHeaderTimestamp = this._getDateHeaderTimestamp(cachedResponse); - if (dateHeaderTimestamp === null) { - return true; - } - const now = Date.now(); - return dateHeaderTimestamp >= now - this._maxAgeSeconds * 1e3; - } - /** - * This method will extract the data header and parse it into a useful - * value. - * - * @param {Response} cachedResponse - * @return {number|null} - * - * @private - */ - _getDateHeaderTimestamp(cachedResponse) { - if (!cachedResponse.headers.has("date")) { - return null; - } - const dateHeader = cachedResponse.headers.get("date"); - const parsedDate = new Date(dateHeader); - const headerTime = parsedDate.getTime(); - if (isNaN(headerTime)) { - return null; - } - return headerTime; - } - /** - * This is a helper method that performs two operations: - * - * - Deletes *all* the underlying Cache instances associated with this plugin - * instance, by calling caches.delete() on your behalf. - * - Deletes the metadata from IndexedDB used to keep track of expiration - * details for each Cache instance. - * - * When using cache expiration, calling this method is preferable to calling - * `caches.delete()` directly, since this will ensure that the IndexedDB - * metadata is also cleanly removed and open IndexedDB instances are deleted. - * - * Note that if you're *not* using cache expiration for a given cache, calling - * `caches.delete()` and passing in the cache's name should be sufficient. - * There is no Workbox-specific method needed for cleanup in that case. - */ - async deleteCacheAndMetadata() { - for (const [cacheName, cacheExpiration] of this._cacheExpirations) { - await self.caches.delete(cacheName); - await cacheExpiration.delete(); - } - this._cacheExpirations = /* @__PURE__ */ new Map(); - } - } - - // @ts-ignore - try { - self['workbox:precaching:7.2.0'] && _(); - } - catch (e) { } - - /* - Copyright 2018 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - // Name of the search parameter used to store revision info. - const REVISION_SEARCH_PARAM = '__WB_REVISION__'; - /** - * Converts a manifest entry into a versioned URL suitable for precaching. - * - * @param {Object|string} entry - * @return {string} A URL with versioning info. - * - * @private - * @memberof workbox-precaching - */ - function createCacheKey(entry) { - if (!entry) { - throw new WorkboxError('add-to-cache-list-unexpected-type', { entry }); - } - // If a precache manifest entry is a string, it's assumed to be a versioned - // URL, like '/app.abcd1234.js'. Return as-is. - if (typeof entry === 'string') { - const urlObject = new URL(entry, location.href); - return { - cacheKey: urlObject.href, - url: urlObject.href, - }; - } - const { revision, url } = entry; - if (!url) { - throw new WorkboxError('add-to-cache-list-unexpected-type', { entry }); - } - // If there's just a URL and no revision, then it's also assumed to be a - // versioned URL. - if (!revision) { - const urlObject = new URL(url, location.href); - return { - cacheKey: urlObject.href, - url: urlObject.href, - }; - } - // Otherwise, construct a properly versioned URL using the custom Workbox - // search parameter along with the revision info. - const cacheKeyURL = new URL(url, location.href); - const originalURL = new URL(url, location.href); - cacheKeyURL.searchParams.set(REVISION_SEARCH_PARAM, revision); - return { - cacheKey: cacheKeyURL.href, - url: originalURL.href, - }; - } - - /* - Copyright 2020 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - /** - * A plugin, designed to be used with PrecacheController, to determine the - * of assets that were updated (or not updated) during the install event. - * - * @private - */ - class PrecacheInstallReportPlugin { - constructor() { - this.updatedURLs = []; - this.notUpdatedURLs = []; - this.handlerWillStart = async ({ request, state, }) => { - // TODO: `state` should never be undefined... - if (state) { - state.originalRequest = request; - } - }; - this.cachedResponseWillBeUsed = async ({ event, state, cachedResponse, }) => { - if (event.type === 'install') { - if (state && - state.originalRequest && - state.originalRequest instanceof Request) { - // TODO: `state` should never be undefined... - const url = state.originalRequest.url; - if (cachedResponse) { - this.notUpdatedURLs.push(url); - } - else { - this.updatedURLs.push(url); - } - } - } - return cachedResponse; - }; - } - } - - /* - Copyright 2020 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - /** - * A plugin, designed to be used with PrecacheController, to translate URLs into - * the corresponding cache key, based on the current revision info. - * - * @private - */ - class PrecacheCacheKeyPlugin { - constructor({ precacheController }) { - this.cacheKeyWillBeUsed = async ({ request, params, }) => { - // Params is type any, can't change right now. - /* eslint-disable */ - const cacheKey = (params === null || params === void 0 ? void 0 : params.cacheKey) || - this._precacheController.getCacheKeyForURL(request.url); - /* eslint-enable */ - return cacheKey - ? new Request(cacheKey, { headers: request.headers }) - : request; - }; - this._precacheController = precacheController; - } - } - - class PrecacheStrategy extends Strategy { - /** - * - * @param {Object} [options] - * @param {string} [options.cacheName] Cache name to store and retrieve - * requests. Defaults to the cache names provided by - * {@link workbox-core.cacheNames}. - * @param {Array} [options.plugins] {@link https://developers.google.com/web/tools/workbox/guides/using-plugins|Plugins} - * to use in conjunction with this caching strategy. - * @param {Object} [options.fetchOptions] Values passed along to the - * {@link https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters|init} - * of all fetch() requests made by this strategy. - * @param {Object} [options.matchOptions] The - * {@link https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions|CacheQueryOptions} - * for any `cache.match()` or `cache.put()` calls made by this strategy. - * @param {boolean} [options.fallbackToNetwork=true] Whether to attempt to - * get the response from the network if there's a precache miss. - */ - constructor(options = {}) { - options.cacheName = cacheNames.getPrecacheName(options.cacheName); - super(options); - this._fallbackToNetwork = options.fallbackToNetwork === false ? false : true; - this.plugins.push(PrecacheStrategy.copyRedirectedCacheableResponsesPlugin); - } - /** - * @private - * @param {Request|string} request A request to run this strategy for. - * @param {workbox-strategies.StrategyHandler} handler The event that - * triggered the request. - * @return {Promise} - */ - async _handle(request, handler) { - const response = await handler.cacheMatch(request); - if (response) { - return response; - } - if (handler.event && handler.event.type === "install") { - return await this._handleInstall(request, handler); - } - return await this._handleFetch(request, handler); - } - async _handleFetch(request, handler) { - let response; - const params = handler.params || {}; - if (this._fallbackToNetwork) { - const integrityInManifest = params.integrity; - const integrityInRequest = request.integrity; - const noIntegrityConflict = !integrityInRequest || integrityInRequest === integrityInManifest; - response = await handler.fetch(new Request(request, { - integrity: request.mode !== "no-cors" ? integrityInRequest || integrityInManifest : void 0 - })); - if (integrityInManifest && noIntegrityConflict && request.mode !== "no-cors") { - this._useDefaultCacheabilityPluginIfNeeded(); - await handler.cachePut(request, response.clone()); - } - } else { - throw new WorkboxError("missing-precache-entry", { - cacheName: this.cacheName, - url: request.url - }); - } - return response; - } - async _handleInstall(request, handler) { - this._useDefaultCacheabilityPluginIfNeeded(); - const response = await handler.fetch(request); - const wasCached = await handler.cachePut(request, response.clone()); - if (!wasCached) { - throw new WorkboxError("bad-precaching-response", { - url: request.url, - status: response.status - }); - } - return response; - } - /** - * This method is complex, as there a number of things to account for: - * - * The `plugins` array can be set at construction, and/or it might be added to - * to at any time before the strategy is used. - * - * At the time the strategy is used (i.e. during an `install` event), there - * needs to be at least one plugin that implements `cacheWillUpdate` in the - * array, other than `copyRedirectedCacheableResponsesPlugin`. - * - * - If this method is called and there are no suitable `cacheWillUpdate` - * plugins, we need to add `defaultPrecacheCacheabilityPlugin`. - * - * - If this method is called and there is exactly one `cacheWillUpdate`, then - * we don't have to do anything (this might be a previously added - * `defaultPrecacheCacheabilityPlugin`, or it might be a custom plugin). - * - * - If this method is called and there is more than one `cacheWillUpdate`, - * then we need to check if one is `defaultPrecacheCacheabilityPlugin`. If so, - * we need to remove it. (This situation is unlikely, but it could happen if - * the strategy is used multiple times, the first without a `cacheWillUpdate`, - * and then later on after manually adding a custom `cacheWillUpdate`.) - * - * See https://github.com/GoogleChrome/workbox/issues/2737 for more context. - * - * @private - */ - _useDefaultCacheabilityPluginIfNeeded() { - let defaultPluginIndex = null; - let cacheWillUpdatePluginCount = 0; - for (const [index, plugin] of this.plugins.entries()) { - if (plugin === PrecacheStrategy.copyRedirectedCacheableResponsesPlugin) { - continue; - } - if (plugin === PrecacheStrategy.defaultPrecacheCacheabilityPlugin) { - defaultPluginIndex = index; - } - if (plugin.cacheWillUpdate) { - cacheWillUpdatePluginCount++; - } - } - if (cacheWillUpdatePluginCount === 0) { - this.plugins.push(PrecacheStrategy.defaultPrecacheCacheabilityPlugin); - } else if (cacheWillUpdatePluginCount > 1 && defaultPluginIndex !== null) { - this.plugins.splice(defaultPluginIndex, 1); - } - } - } - PrecacheStrategy.defaultPrecacheCacheabilityPlugin = { - async cacheWillUpdate({ response }) { - if (!response || response.status >= 400) { - return null; - } - return response; - } - }; - PrecacheStrategy.copyRedirectedCacheableResponsesPlugin = { - async cacheWillUpdate({ response }) { - return response.redirected ? await copyResponse(response) : response; - } - }; - - class PrecacheController { - /** - * Create a new PrecacheController. - * - * @param {Object} [options] - * @param {string} [options.cacheName] The cache to use for precaching. - * @param {string} [options.plugins] Plugins to use when precaching as well - * as responding to fetch events for precached assets. - * @param {boolean} [options.fallbackToNetwork=true] Whether to attempt to - * get the response from the network if there's a precache miss. - */ - constructor({ cacheName, plugins = [], fallbackToNetwork = true } = {}) { - this._urlsToCacheKeys = /* @__PURE__ */ new Map(); - this._urlsToCacheModes = /* @__PURE__ */ new Map(); - this._cacheKeysToIntegrities = /* @__PURE__ */ new Map(); - this._strategy = new PrecacheStrategy({ - cacheName: cacheNames.getPrecacheName(cacheName), - plugins: [ - ...plugins, - new PrecacheCacheKeyPlugin({ precacheController: this }) - ], - fallbackToNetwork - }); - this.install = this.install.bind(this); - this.activate = this.activate.bind(this); - } - /** - * @type {workbox-precaching.PrecacheStrategy} The strategy created by this controller and - * used to cache assets and respond to fetch events. - */ - get strategy() { - return this._strategy; - } - /** - * Adds items to the precache list, removing any duplicates and - * stores the files in the - * {@link workbox-core.cacheNames|"precache cache"} when the service - * worker installs. - * - * This method can be called multiple times. - * - * @param {Array} [entries=[]] Array of entries to precache. - */ - precache(entries) { - this.addToCacheList(entries); - if (!this._installAndActiveListenersAdded) { - self.addEventListener("install", this.install); - self.addEventListener("activate", this.activate); - this._installAndActiveListenersAdded = true; - } - } - /** - * This method will add items to the precache list, removing duplicates - * and ensuring the information is valid. - * - * @param {Array} entries - * Array of entries to precache. - */ - addToCacheList(entries) { - const urlsToWarnAbout = []; - for (const entry of entries) { - if (typeof entry === "string") { - urlsToWarnAbout.push(entry); - } else if (entry && entry.revision === void 0) { - urlsToWarnAbout.push(entry.url); - } - const { cacheKey, url } = createCacheKey(entry); - const cacheMode = typeof entry !== "string" && entry.revision ? "reload" : "default"; - if (this._urlsToCacheKeys.has(url) && this._urlsToCacheKeys.get(url) !== cacheKey) { - throw new WorkboxError("add-to-cache-list-conflicting-entries", { - firstEntry: this._urlsToCacheKeys.get(url), - secondEntry: cacheKey - }); - } - if (typeof entry !== "string" && entry.integrity) { - if (this._cacheKeysToIntegrities.has(cacheKey) && this._cacheKeysToIntegrities.get(cacheKey) !== entry.integrity) { - throw new WorkboxError("add-to-cache-list-conflicting-integrities", { - url - }); - } - this._cacheKeysToIntegrities.set(cacheKey, entry.integrity); - } - this._urlsToCacheKeys.set(url, cacheKey); - this._urlsToCacheModes.set(url, cacheMode); - if (urlsToWarnAbout.length > 0) { - const warningMessage = `Workbox is precaching URLs without revision info: ${urlsToWarnAbout.join(", ")} -This is generally NOT safe. Learn more at https://bit.ly/wb-precache`; - { - console.warn(warningMessage); - } - } - } - } - /** - * Precaches new and updated assets. Call this method from the service worker - * install event. - * - * Note: this method calls `event.waitUntil()` for you, so you do not need - * to call it yourself in your event handlers. - * - * @param {ExtendableEvent} event - * @return {Promise} - */ - install(event) { - return waitUntil(event, async () => { - const installReportPlugin = new PrecacheInstallReportPlugin(); - this.strategy.plugins.push(installReportPlugin); - for (const [url, cacheKey] of this._urlsToCacheKeys) { - const integrity = this._cacheKeysToIntegrities.get(cacheKey); - const cacheMode = this._urlsToCacheModes.get(url); - const request = new Request(url, { - integrity, - cache: cacheMode, - credentials: "same-origin" - }); - await Promise.all(this.strategy.handleAll({ - params: { cacheKey }, - request, - event - })); - } - const { updatedURLs, notUpdatedURLs } = installReportPlugin; - return { updatedURLs, notUpdatedURLs }; - }); - } - /** - * Deletes assets that are no longer present in the current precache manifest. - * Call this method from the service worker activate event. - * - * Note: this method calls `event.waitUntil()` for you, so you do not need - * to call it yourself in your event handlers. - * - * @param {ExtendableEvent} event - * @return {Promise} - */ - activate(event) { - return waitUntil(event, async () => { - const cache = await self.caches.open(this.strategy.cacheName); - const currentlyCachedRequests = await cache.keys(); - const expectedCacheKeys = new Set(this._urlsToCacheKeys.values()); - const deletedURLs = []; - for (const request of currentlyCachedRequests) { - if (!expectedCacheKeys.has(request.url)) { - await cache.delete(request); - deletedURLs.push(request.url); - } - } - return { deletedURLs }; - }); - } - /** - * Returns a mapping of a precached URL to the corresponding cache key, taking - * into account the revision information for the URL. - * - * @return {Map} A URL to cache key mapping. - */ - getURLsToCacheKeys() { - return this._urlsToCacheKeys; - } - /** - * Returns a list of all the URLs that have been precached by the current - * service worker. - * - * @return {Array} The precached URLs. - */ - getCachedURLs() { - return [...this._urlsToCacheKeys.keys()]; - } - /** - * Returns the cache key used for storing a given URL. If that URL is - * unversioned, like `/index.html', then the cache key will be the original - * URL with a search parameter appended to it. - * - * @param {string} url A URL whose cache key you want to look up. - * @return {string} The versioned URL that corresponds to a cache key - * for the original URL, or undefined if that URL isn't precached. - */ - getCacheKeyForURL(url) { - const urlObject = new URL(url, location.href); - return this._urlsToCacheKeys.get(urlObject.href); - } - /** - * @param {string} url A cache key whose SRI you want to look up. - * @return {string} The subresource integrity associated with the cache key, - * or undefined if it's not set. - */ - getIntegrityForCacheKey(cacheKey) { - return this._cacheKeysToIntegrities.get(cacheKey); - } - /** - * This acts as a drop-in replacement for - * [`cache.match()`](https://developer.mozilla.org/en-US/docs/Web/API/Cache/match) - * with the following differences: - * - * - It knows what the name of the precache is, and only checks in that cache. - * - It allows you to pass in an "original" URL without versioning parameters, - * and it will automatically look up the correct cache key for the currently - * active revision of that URL. - * - * E.g., `matchPrecache('index.html')` will find the correct precached - * response for the currently active service worker, even if the actual cache - * key is `'/index.html?__WB_REVISION__=1234abcd'`. - * - * @param {string|Request} request The key (without revisioning parameters) - * to look up in the precache. - * @return {Promise} - */ - async matchPrecache(request) { - const url = request instanceof Request ? request.url : request; - const cacheKey = this.getCacheKeyForURL(url); - if (cacheKey) { - const cache = await self.caches.open(this.strategy.cacheName); - return cache.match(cacheKey); - } - return void 0; - } - /** - * Returns a function that looks up `url` in the precache (taking into - * account revision information), and returns the corresponding `Response`. - * - * @param {string} url The precached URL which will be used to lookup the - * `Response`. - * @return {workbox-routing~handlerCallback} - */ - createHandlerBoundToURL(url) { - const cacheKey = this.getCacheKeyForURL(url); - if (!cacheKey) { - throw new WorkboxError("non-precached-url", { url }); - } - return (options) => { - options.request = new Request(url); - options.params = Object.assign({ cacheKey }, options.params); - return this.strategy.handle(options); - }; - } - } - - /* - Copyright 2019 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - let precacheController; - /** - * @return {PrecacheController} - * @private - */ - const getOrCreatePrecacheController = () => { - if (!precacheController) { - precacheController = new PrecacheController(); - } - return precacheController; - }; - - /* - Copyright 2018 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - /** - * Removes any URL search parameters that should be ignored. - * - * @param {URL} urlObject The original URL. - * @param {Array} ignoreURLParametersMatching RegExps to test against - * each search parameter name. Matches mean that the search parameter should be - * ignored. - * @return {URL} The URL with any ignored search parameters removed. - * - * @private - * @memberof workbox-precaching - */ - function removeIgnoredSearchParams(urlObject, ignoreURLParametersMatching = []) { - // Convert the iterable into an array at the start of the loop to make sure - // deletion doesn't mess up iteration. - for (const paramName of [...urlObject.searchParams.keys()]) { - if (ignoreURLParametersMatching.some((regExp) => regExp.test(paramName))) { - urlObject.searchParams.delete(paramName); - } - } - return urlObject; - } - - /* - Copyright 2019 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - /** - * Generator function that yields possible variations on the original URL to - * check, one at a time. - * - * @param {string} url - * @param {Object} options - * - * @private - * @memberof workbox-precaching - */ - function* generateURLVariations(url, { ignoreURLParametersMatching = [/^utm_/, /^fbclid$/], directoryIndex = 'index.html', cleanURLs = true, urlManipulation, } = {}) { - const urlObject = new URL(url, location.href); - urlObject.hash = ''; - yield urlObject.href; - const urlWithoutIgnoredParams = removeIgnoredSearchParams(urlObject, ignoreURLParametersMatching); - yield urlWithoutIgnoredParams.href; - if (directoryIndex && urlWithoutIgnoredParams.pathname.endsWith('/')) { - const directoryURL = new URL(urlWithoutIgnoredParams.href); - directoryURL.pathname += directoryIndex; - yield directoryURL.href; - } - if (cleanURLs) { - const cleanURL = new URL(urlWithoutIgnoredParams.href); - cleanURL.pathname += '.html'; - yield cleanURL.href; - } - if (urlManipulation) { - const additionalURLs = urlManipulation({ url: urlObject }); - for (const urlToAttempt of additionalURLs) { - yield urlToAttempt.href; - } - } - } - - class PrecacheRoute extends Route { - /** - * @param {PrecacheController} precacheController A `PrecacheController` - * instance used to both match requests and respond to fetch events. - * @param {Object} [options] Options to control how requests are matched - * against the list of precached URLs. - * @param {string} [options.directoryIndex=index.html] The `directoryIndex` will - * check cache entries for a URLs ending with '/' to see if there is a hit when - * appending the `directoryIndex` value. - * @param {Array} [options.ignoreURLParametersMatching=[/^utm_/, /^fbclid$/]] An - * array of regex's to remove search params when looking for a cache match. - * @param {boolean} [options.cleanURLs=true] The `cleanURLs` option will - * check the cache for the URL with a `.html` added to the end of the end. - * @param {workbox-precaching~urlManipulation} [options.urlManipulation] - * This is a function that should take a URL and return an array of - * alternative URLs that should be checked for precache matches. - */ - constructor(precacheController, options) { - const match = ({ request }) => { - const urlsToCacheKeys = precacheController.getURLsToCacheKeys(); - for (const possibleURL of generateURLVariations(request.url, options)) { - const cacheKey = urlsToCacheKeys.get(possibleURL); - if (cacheKey) { - const integrity = precacheController.getIntegrityForCacheKey(cacheKey); - return { cacheKey, integrity }; - } - } - return; - }; - super(match, precacheController.strategy); - } - } - - /* - Copyright 2019 Google LLC - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - /** - * Add a `fetch` listener to the service worker that will - * respond to - * [network requests]{@link https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers#Custom_responses_to_requests} - * with precached assets. - * - * Requests for assets that aren't precached, the `FetchEvent` will not be - * responded to, allowing the event to fall through to other `fetch` event - * listeners. - * - * @param {Object} [options] See the {@link workbox-precaching.PrecacheRoute} - * options. - * - * @memberof workbox-precaching - */ - function addRoute(options) { - const precacheController = getOrCreatePrecacheController(); - const precacheRoute = new PrecacheRoute(precacheController, options); - registerRoute(precacheRoute); - } - - /* - Copyright 2019 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - /** - * Adds items to the precache list, removing any duplicates and - * stores the files in the - * {@link workbox-core.cacheNames|"precache cache"} when the service - * worker installs. - * - * This method can be called multiple times. - * - * Please note: This method **will not** serve any of the cached files for you. - * It only precaches files. To respond to a network request you call - * {@link workbox-precaching.addRoute}. - * - * If you have a single array of files to precache, you can just call - * {@link workbox-precaching.precacheAndRoute}. - * - * @param {Array} [entries=[]] Array of entries to precache. - * - * @memberof workbox-precaching - */ - function precache(entries) { - const precacheController = getOrCreatePrecacheController(); - precacheController.precache(entries); - } - - /* - Copyright 2019 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - /** - * This method will add entries to the precache list and add a route to - * respond to fetch events. - * - * This is a convenience method that will call - * {@link workbox-precaching.precache} and - * {@link workbox-precaching.addRoute} in a single call. - * - * @param {Array} entries Array of entries to precache. - * @param {Object} [options] See the - * {@link workbox-precaching.PrecacheRoute} options. - * - * @memberof workbox-precaching - */ - function precacheAndRoute(entries, options) { - precache(entries); - addRoute(options); - } - - const CONFIG = { - TIMEZONE: "Europe/Vienna", - SEASON: (/* @__PURE__ */ new Date()).getFullYear(), - API_BASE: "https://api.hardbulls.com/", - BULLS_LEAGUES: ["bbl"], - ASSET_JSON_CACHE_TTL: 60 * 60, - // 1h - ASSET_IMAGE_CACHE_TTL: 60 * 60 * 24 - // 1d - }; - - self.__WB_DISABLE_DEV_LOGS = true; - self.addEventListener("install", async (_) => { - await self.skipWaiting(); - }); - clientsClaim(); - precacheAndRoute(self.__WB_MANIFEST); - registerRoute( - new RegExp(`^${escapeRegExp(CONFIG.API_BASE)}api/.*\\.json$`), - new StaleWhileRevalidate({ - cacheName: "api-json-cache", - plugins: [ - new ExpirationPlugin({ - purgeOnQuotaError: true, - maxAgeSeconds: CONFIG.ASSET_JSON_CACHE_TTL - }) - ] - }) - ); - registerRoute( - new RegExp(`^${escapeRegExp(CONFIG.API_BASE)}assets/.*\\.(?:png|jpg|jpeg|svg|webp)$`), - new CacheFirst({ - cacheName: "api-assets-cache-v1", - plugins: [ - new ExpirationPlugin({ - maxAgeSeconds: CONFIG.ASSET_IMAGE_CACHE_TTL, - purgeOnQuotaError: true - }) - ] - }) - ); - -})(); -//# sourceMappingURL=_service-worker.js.map +(function(){"use strict";try{self["workbox:core:7.2.0"]&&_()}catch{}const We=null,z=(s,...e)=>{let t=s;return e.length>0&&(t+=` :: ${JSON.stringify(e)}`),t};class l extends Error{constructor(e,t){const n=z(e,t);super(n),this.name=e,this.details=t}}const N=new Set;function Y(s){N.add(s)}const d={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:typeof registration<"u"?registration.scope:""},L=s=>[d.prefix,s,d.suffix].filter(e=>e&&e.length>0).join("-"),Z=s=>{for(const e of Object.keys(d))s(e)},b={updateDetails:s=>{Z(e=>{typeof s[e]=="string"&&(d[e]=s[e])})},getGoogleAnalyticsName:s=>s||L(d.googleAnalytics),getPrecacheName:s=>s||L(d.precache),getPrefix:()=>d.prefix,getRuntimeName:s=>s||L(d.runtime),getSuffix:()=>d.suffix};function v(s,e){const t=new URL(s);for(const n of e)t.searchParams.delete(n);return t.href}async function X(s,e,t,n){const a=v(e.url,t);if(e.url===a)return s.match(e,n);const r=Object.assign(Object.assign({},n),{ignoreSearch:!0}),i=await s.keys(e,r);for(const c of i){const o=v(c.url,t);if(a===o)return s.match(c,n)}}let g;function ee(){if(g===void 0){const s=new Response("");if("body"in s)try{new Response(s.body),g=!0}catch{g=!1}g=!1}return g}function O(s){s.then(()=>{})}class te{constructor(){this.promise=new Promise((e,t)=>{this.resolve=e,this.reject=t})}}async function se(){for(const s of N)await s()}const ne=s=>new URL(String(s),location.href).href.replace(new RegExp(`^${location.origin}`),"");function ae(s){return new Promise(e=>setTimeout(e,s))}function K(s,e){const t=e();return s.waitUntil(t),t}async function re(s,e){let t=null;if(s.url&&(t=new URL(s.url).origin),t!==self.location.origin)throw new l("cross-origin-copy-response",{origin:t});const n=s.clone(),r={headers:new Headers(n.headers),status:n.status,statusText:n.statusText},i=ee()?n.body:await n.blob();return new Response(i,r)}function ie(){self.addEventListener("activate",()=>self.clients.claim())}try{self["workbox:routing:7.2.0"]&&_()}catch{}const B="GET",C=s=>s&&typeof s=="object"?s:{handle:s};class m{constructor(e,t,n=B){this.handler=C(t),this.match=e,this.method=n}setCatchHandler(e){this.catchHandler=C(e)}}class ce extends m{constructor(e,t,n){const a=({url:r})=>{const i=e.exec(r.href);if(i&&!(r.origin!==location.origin&&i.index!==0))return i.slice(1)};super(a,t,n)}}class oe{constructor(){this._routes=new Map,this._defaultHandlerMap=new Map}get routes(){return this._routes}addFetchListener(){self.addEventListener("fetch",e=>{const{request:t}=e,n=this.handleRequest({request:t,event:e});n&&e.respondWith(n)})}addCacheListener(){self.addEventListener("message",e=>{if(e.data&&e.data.type==="CACHE_URLS"){const{payload:t}=e.data,n=Promise.all(t.urlsToCache.map(a=>{typeof a=="string"&&(a=[a]);const r=new Request(...a);return this.handleRequest({request:r,event:e})}));e.waitUntil(n),e.ports&&e.ports[0]&&n.then(()=>e.ports[0].postMessage(!0))}})}handleRequest({request:e,event:t}){const n=new URL(e.url,location.href);if(!n.protocol.startsWith("http"))return;const a=n.origin===location.origin,{params:r,route:i}=this.findMatchingRoute({event:t,request:e,sameOrigin:a,url:n});let c=i&&i.handler;const o=e.method;if(!c&&this._defaultHandlerMap.has(o)&&(c=this._defaultHandlerMap.get(o)),!c)return;let h;try{h=c.handle({url:n,request:e,event:t,params:r})}catch(u){h=Promise.reject(u)}const R=i&&i.catchHandler;return h instanceof Promise&&(this._catchHandler||R)&&(h=h.catch(async u=>{if(R)try{return await R.handle({url:n,request:e,event:t,params:r})}catch(J){J instanceof Error&&(u=J)}if(this._catchHandler)return this._catchHandler.handle({url:n,request:e,event:t});throw u})),h}findMatchingRoute({url:e,sameOrigin:t,request:n,event:a}){const r=this._routes.get(n.method)||[];for(const i of r){let c;const o=i.match({url:e,sameOrigin:t,request:n,event:a});if(o)return c=o,(Array.isArray(c)&&c.length===0||o.constructor===Object&&Object.keys(o).length===0||typeof o=="boolean")&&(c=void 0),{route:i,params:c}}return{}}setDefaultHandler(e,t=B){this._defaultHandlerMap.set(t,C(e))}setCatchHandler(e){this._catchHandler=C(e)}registerRoute(e){this._routes.has(e.method)||this._routes.set(e.method,[]),this._routes.get(e.method).push(e)}unregisterRoute(e){if(!this._routes.has(e.method))throw new l("unregister-route-but-not-found-with-method",{method:e.method});const t=this._routes.get(e.method).indexOf(e);if(t>-1)this._routes.get(e.method).splice(t,1);else throw new l("unregister-route-route-not-registered")}}let w;const he=()=>(w||(w=new oe,w.addFetchListener(),w.addCacheListener()),w);function D(s,e,t){let n;if(typeof s=="string"){const r=new URL(s,location.href),i=({url:c})=>c.href===r.href;n=new m(i,e,t)}else if(s instanceof RegExp)n=new ce(s,e,t);else if(typeof s=="function")n=new m(s,e,t);else if(s instanceof m)n=s;else throw new l("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});return he().registerRoute(n),n}try{self["workbox:strategies:7.2.0"]&&_()}catch{}function E(s){return typeof s=="string"?new Request(s):s}class le{constructor(e,t){this._cacheKeys={},Object.assign(this,t),this.event=t.event,this._strategy=e,this._handlerDeferred=new te,this._extendLifetimePromises=[],this._plugins=[...e.plugins],this._pluginStateMap=new Map;for(const n of this._plugins)this._pluginStateMap.set(n,{});this.event.waitUntil(this._handlerDeferred.promise)}async fetch(e){const{event:t}=this;let n=E(e);if(n.mode==="navigate"&&t instanceof FetchEvent&&t.preloadResponse){const i=await t.preloadResponse;if(i)return i}const a=this.hasCallback("fetchDidFail")?n.clone():null;try{for(const i of this.iterateCallbacks("requestWillFetch"))n=await i({request:n.clone(),event:t})}catch(i){if(i instanceof Error)throw new l("plugin-error-request-will-fetch",{thrownErrorMessage:i.message})}const r=n.clone();try{let i;i=await fetch(n,n.mode==="navigate"?void 0:this._strategy.fetchOptions);for(const c of this.iterateCallbacks("fetchDidSucceed"))i=await c({event:t,request:r,response:i});return i}catch(i){throw a&&await this.runCallbacks("fetchDidFail",{error:i,event:t,originalRequest:a.clone(),request:r.clone()}),i}}async fetchAndCachePut(e){const t=await this.fetch(e),n=t.clone();return this.waitUntil(this.cachePut(e,n)),t}async cacheMatch(e){const t=E(e);let n;const{cacheName:a,matchOptions:r}=this._strategy,i=await this.getCacheKey(t,"read"),c=Object.assign(Object.assign({},r),{cacheName:a});n=await caches.match(i,c);for(const o of this.iterateCallbacks("cachedResponseWillBeUsed"))n=await o({cacheName:a,matchOptions:r,cachedResponse:n,request:i,event:this.event})||void 0;return n}async cachePut(e,t){const n=E(e);await ae(0);const a=await this.getCacheKey(n,"write");if(!t)throw new l("cache-put-with-no-response",{url:ne(a.url)});const r=await this._ensureResponseSafeToCache(t);if(!r)return!1;const{cacheName:i,matchOptions:c}=this._strategy,o=await self.caches.open(i),h=this.hasCallback("cacheDidUpdate"),R=h?await X(o,a.clone(),["__WB_REVISION__"],c):null;try{await o.put(a,h?r.clone():r)}catch(u){if(u instanceof Error)throw u.name==="QuotaExceededError"&&await se(),u}for(const u of this.iterateCallbacks("cacheDidUpdate"))await u({cacheName:i,oldResponse:R,newResponse:r.clone(),request:a,event:this.event});return!0}async getCacheKey(e,t){const n=`${e.url} | ${t}`;if(!this._cacheKeys[n]){let a=e;for(const r of this.iterateCallbacks("cacheKeyWillBeUsed"))a=E(await r({mode:t,request:a,event:this.event,params:this.params}));this._cacheKeys[n]=a}return this._cacheKeys[n]}hasCallback(e){for(const t of this._strategy.plugins)if(e in t)return!0;return!1}async runCallbacks(e,t){for(const n of this.iterateCallbacks(e))await n(t)}*iterateCallbacks(e){for(const t of this._strategy.plugins)if(typeof t[e]=="function"){const n=this._pluginStateMap.get(t);yield r=>{const i=Object.assign(Object.assign({},r),{state:n});return t[e](i)}}}waitUntil(e){return this._extendLifetimePromises.push(e),e}async doneWaiting(){let e;for(;e=this._extendLifetimePromises.shift();)await e}destroy(){this._handlerDeferred.resolve(null)}async _ensureResponseSafeToCache(e){let t=e,n=!1;for(const a of this.iterateCallbacks("cacheWillUpdate"))if(t=await a({request:this.request,response:t,event:this.event})||void 0,n=!0,!t)break;return n||t&&t.status!==200&&(t=void 0),t}}class T{constructor(e={}){this.cacheName=b.getRuntimeName(e.cacheName),this.plugins=e.plugins||[],this.fetchOptions=e.fetchOptions,this.matchOptions=e.matchOptions}handle(e){const[t]=this.handleAll(e);return t}handleAll(e){e instanceof FetchEvent&&(e={event:e,request:e.request});const t=e.event,n=typeof e.request=="string"?new Request(e.request):e.request,a="params"in e?e.params:void 0,r=new le(this,{event:t,request:n,params:a}),i=this._getResponse(r,n,t),c=this._awaitComplete(i,r,n,t);return[i,c]}async _getResponse(e,t,n){await e.runCallbacks("handlerWillStart",{event:n,request:t});let a;try{if(a=await this._handle(t,e),!a||a.type==="error")throw new l("no-response",{url:t.url})}catch(r){if(r instanceof Error){for(const i of e.iterateCallbacks("handlerDidError"))if(a=await i({error:r,event:n,request:t}),a)break}if(!a)throw r}for(const r of e.iterateCallbacks("handlerWillRespond"))a=await r({event:n,request:t,response:a});return a}async _awaitComplete(e,t,n,a){let r,i;try{r=await e}catch{}try{await t.runCallbacks("handlerDidRespond",{event:a,request:n,response:r}),await t.doneWaiting()}catch(c){c instanceof Error&&(i=c)}if(await t.runCallbacks("handlerDidComplete",{event:a,request:n,response:r,error:i}),t.destroy(),i)throw i}}class ue extends T{async _handle(e,t){let n=await t.cacheMatch(e),a;if(!n)try{n=await t.fetchAndCachePut(e)}catch(r){r instanceof Error&&(a=r)}if(!n)throw new l("no-response",{url:e.url,error:a});return n}}const de={cacheWillUpdate:async({response:s})=>s.status===200||s.status===0?s:null};class fe extends T{constructor(e={}){super(e),this.plugins.some(t=>"cacheWillUpdate"in t)||this.plugins.unshift(de)}async _handle(e,t){const n=t.fetchAndCachePut(e).catch(()=>{});t.waitUntil(n);let a=await t.cacheMatch(e),r;if(!a)try{a=await n}catch(i){i instanceof Error&&(r=i)}if(!a)throw new l("no-response",{url:e.url,error:r});return a}}function W(s){return s.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}const pe=(s,e)=>e.some(t=>s instanceof t);let j,F;function ge(){return j||(j=[IDBDatabase,IDBObjectStore,IDBIndex,IDBCursor,IDBTransaction])}function me(){return F||(F=[IDBCursor.prototype.advance,IDBCursor.prototype.continue,IDBCursor.prototype.continuePrimaryKey])}const H=new WeakMap,U=new WeakMap,q=new WeakMap,A=new WeakMap,P=new WeakMap;function we(s){const e=new Promise((t,n)=>{const a=()=>{s.removeEventListener("success",r),s.removeEventListener("error",i)},r=()=>{t(f(s.result)),a()},i=()=>{n(s.error),a()};s.addEventListener("success",r),s.addEventListener("error",i)});return e.then(t=>{t instanceof IDBCursor&&H.set(t,s)}).catch(()=>{}),P.set(e,s),e}function ye(s){if(U.has(s))return;const e=new Promise((t,n)=>{const a=()=>{s.removeEventListener("complete",r),s.removeEventListener("error",i),s.removeEventListener("abort",i)},r=()=>{t(),a()},i=()=>{n(s.error||new DOMException("AbortError","AbortError")),a()};s.addEventListener("complete",r),s.addEventListener("error",i),s.addEventListener("abort",i)});U.set(s,e)}let k={get(s,e,t){if(s instanceof IDBTransaction){if(e==="done")return U.get(s);if(e==="objectStoreNames")return s.objectStoreNames||q.get(s);if(e==="store")return t.objectStoreNames[1]?void 0:t.objectStore(t.objectStoreNames[0])}return f(s[e])},set(s,e,t){return s[e]=t,!0},has(s,e){return s instanceof IDBTransaction&&(e==="done"||e==="store")?!0:e in s}};function _e(s){k=s(k)}function Re(s){return s===IDBDatabase.prototype.transaction&&!("objectStoreNames"in IDBTransaction.prototype)?function(e,...t){const n=s.call(I(this),e,...t);return q.set(n,e.sort?e.sort():[e]),f(n)}:me().includes(s)?function(...e){return s.apply(I(this),e),f(H.get(this))}:function(...e){return f(s.apply(I(this),e))}}function be(s){return typeof s=="function"?Re(s):(s instanceof IDBTransaction&&ye(s),pe(s,ge())?new Proxy(s,k):s)}function f(s){if(s instanceof IDBRequest)return we(s);if(A.has(s))return A.get(s);const e=be(s);return e!==s&&(A.set(s,e),P.set(e,s)),e}const I=s=>P.get(s);function Ce(s,e,{blocked:t,upgrade:n,blocking:a,terminated:r}={}){const i=indexedDB.open(s,e),c=f(i);return n&&i.addEventListener("upgradeneeded",o=>{n(f(i.result),o.oldVersion,o.newVersion,f(i.transaction),o)}),t&&i.addEventListener("blocked",o=>t(o.oldVersion,o.newVersion,o)),c.then(o=>{r&&o.addEventListener("close",()=>r()),a&&o.addEventListener("versionchange",h=>a(h.oldVersion,h.newVersion,h))}).catch(()=>{}),c}function Ee(s,{blocked:e}={}){const t=indexedDB.deleteDatabase(s);return e&&t.addEventListener("blocked",n=>e(n.oldVersion,n)),f(t).then(()=>{})}const xe=["get","getKey","getAll","getAllKeys","count"],Le=["put","add","delete","clear"],S=new Map;function V(s,e){if(!(s instanceof IDBDatabase&&!(e in s)&&typeof e=="string"))return;if(S.get(e))return S.get(e);const t=e.replace(/FromIndex$/,""),n=e!==t,a=Le.includes(t);if(!(t in(n?IDBIndex:IDBObjectStore).prototype)||!(a||xe.includes(t)))return;const r=async function(i,...c){const o=this.transaction(i,a?"readwrite":"readonly");let h=o.store;return n&&(h=h.index(c.shift())),(await Promise.all([h[t](...c),a&&o.done]))[0]};return S.set(e,r),r}_e(s=>({...s,get:(e,t,n)=>V(e,t)||s.get(e,t,n),has:(e,t)=>!!V(e,t)||s.has(e,t)}));try{self["workbox:expiration:7.2.0"]&&_()}catch{}const De="workbox-expiration",y="cache-entries",$=s=>{const e=new URL(s,location.href);return e.hash="",e.href};class Te{constructor(e){this._db=null,this._cacheName=e}_upgradeDb(e){const t=e.createObjectStore(y,{keyPath:"id"});t.createIndex("cacheName","cacheName",{unique:!1}),t.createIndex("timestamp","timestamp",{unique:!1})}_upgradeDbAndDeleteOldDbs(e){this._upgradeDb(e),this._cacheName&&Ee(this._cacheName)}async setTimestamp(e,t){e=$(e);const n={url:e,timestamp:t,cacheName:this._cacheName,id:this._getId(e)},r=(await this.getDb()).transaction(y,"readwrite",{durability:"relaxed"});await r.store.put(n),await r.done}async getTimestamp(e){const n=await(await this.getDb()).get(y,this._getId(e));return n?.timestamp}async expireEntries(e,t){const n=await this.getDb();let a=await n.transaction(y).store.index("timestamp").openCursor(null,"prev");const r=[];let i=0;for(;a;){const o=a.value;o.cacheName===this._cacheName&&(e&&o.timestamp=t?r.push(a.value):i++),a=await a.continue()}const c=[];for(const o of r)await n.delete(y,o.id),c.push(o.url);return c}_getId(e){return this._cacheName+"|"+$(e)}async getDb(){return this._db||(this._db=await Ce(De,1,{upgrade:this._upgradeDbAndDeleteOldDbs.bind(this)})),this._db}}class Ue{constructor(e,t={}){this._isRunning=!1,this._rerunRequested=!1,this._maxEntries=t.maxEntries,this._maxAgeSeconds=t.maxAgeSeconds,this._matchOptions=t.matchOptions,this._cacheName=e,this._timestampModel=new Te(e)}async expireEntries(){if(this._isRunning){this._rerunRequested=!0;return}this._isRunning=!0;const e=this._maxAgeSeconds?Date.now()-this._maxAgeSeconds*1e3:0,t=await this._timestampModel.expireEntries(e,this._maxEntries),n=await self.caches.open(this._cacheName);for(const a of t)await n.delete(a,this._matchOptions);this._isRunning=!1,this._rerunRequested&&(this._rerunRequested=!1,O(this.expireEntries()))}async updateTimestamp(e){await this._timestampModel.setTimestamp(e,Date.now())}async isURLExpired(e){if(this._maxAgeSeconds){const t=await this._timestampModel.getTimestamp(e),n=Date.now()-this._maxAgeSeconds*1e3;return t!==void 0?t{if(!r)return null;const i=this._isResponseDateFresh(r),c=this._getCacheExpiration(a);O(c.expireEntries());const o=c.updateTimestamp(n.url);if(t)try{t.waitUntil(o)}catch{}return i?r:null},this.cacheDidUpdate=async({cacheName:t,request:n})=>{const a=this._getCacheExpiration(t);await a.updateTimestamp(n.url),await a.expireEntries()},this._config=e,this._maxAgeSeconds=e.maxAgeSeconds,this._cacheExpirations=new Map,e.purgeOnQuotaError&&Y(()=>this.deleteCacheAndMetadata())}_getCacheExpiration(e){if(e===b.getRuntimeName())throw new l("expire-custom-caches-only");let t=this._cacheExpirations.get(e);return t||(t=new Ue(e,this._config),this._cacheExpirations.set(e,t)),t}_isResponseDateFresh(e){if(!this._maxAgeSeconds)return!0;const t=this._getDateHeaderTimestamp(e);if(t===null)return!0;const n=Date.now();return t>=n-this._maxAgeSeconds*1e3}_getDateHeaderTimestamp(e){if(!e.headers.has("date"))return null;const t=e.headers.get("date"),a=new Date(t).getTime();return isNaN(a)?null:a}async deleteCacheAndMetadata(){for(const[e,t]of this._cacheExpirations)await self.caches.delete(e),await t.delete();this._cacheExpirations=new Map}}try{self["workbox:precaching:7.2.0"]&&_()}catch{}const Ae="__WB_REVISION__";function Pe(s){if(!s)throw new l("add-to-cache-list-unexpected-type",{entry:s});if(typeof s=="string"){const r=new URL(s,location.href);return{cacheKey:r.href,url:r.href}}const{revision:e,url:t}=s;if(!t)throw new l("add-to-cache-list-unexpected-type",{entry:s});if(!e){const r=new URL(t,location.href);return{cacheKey:r.href,url:r.href}}const n=new URL(t,location.href),a=new URL(t,location.href);return n.searchParams.set(Ae,e),{cacheKey:n.href,url:a.href}}class ke{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:e,state:t})=>{t&&(t.originalRequest=e)},this.cachedResponseWillBeUsed=async({event:e,state:t,cachedResponse:n})=>{if(e.type==="install"&&t&&t.originalRequest&&t.originalRequest instanceof Request){const a=t.originalRequest.url;n?this.notUpdatedURLs.push(a):this.updatedURLs.push(a)}return n}}}class Ie{constructor({precacheController:e}){this.cacheKeyWillBeUsed=async({request:t,params:n})=>{const a=n?.cacheKey||this._precacheController.getCacheKeyForURL(t.url);return a?new Request(a,{headers:t.headers}):t},this._precacheController=e}}class p extends T{constructor(e={}){e.cacheName=b.getPrecacheName(e.cacheName),super(e),this._fallbackToNetwork=e.fallbackToNetwork!==!1,this.plugins.push(p.copyRedirectedCacheableResponsesPlugin)}async _handle(e,t){const n=await t.cacheMatch(e);return n||(t.event&&t.event.type==="install"?await this._handleInstall(e,t):await this._handleFetch(e,t))}async _handleFetch(e,t){let n;const a=t.params||{};if(this._fallbackToNetwork){const r=a.integrity,i=e.integrity,c=!i||i===r;n=await t.fetch(new Request(e,{integrity:e.mode!=="no-cors"?i||r:void 0})),r&&c&&e.mode!=="no-cors"&&(this._useDefaultCacheabilityPluginIfNeeded(),await t.cachePut(e,n.clone()))}else throw new l("missing-precache-entry",{cacheName:this.cacheName,url:e.url});return n}async _handleInstall(e,t){this._useDefaultCacheabilityPluginIfNeeded();const n=await t.fetch(e);if(!await t.cachePut(e,n.clone()))throw new l("bad-precaching-response",{url:e.url,status:n.status});return n}_useDefaultCacheabilityPluginIfNeeded(){let e=null,t=0;for(const[n,a]of this.plugins.entries())a!==p.copyRedirectedCacheableResponsesPlugin&&(a===p.defaultPrecacheCacheabilityPlugin&&(e=n),a.cacheWillUpdate&&t++);t===0?this.plugins.push(p.defaultPrecacheCacheabilityPlugin):t>1&&e!==null&&this.plugins.splice(e,1)}}p.defaultPrecacheCacheabilityPlugin={async cacheWillUpdate({response:s}){return!s||s.status>=400?null:s}},p.copyRedirectedCacheableResponsesPlugin={async cacheWillUpdate({response:s}){return s.redirected?await re(s):s}};class Se{constructor({cacheName:e,plugins:t=[],fallbackToNetwork:n=!0}={}){this._urlsToCacheKeys=new Map,this._urlsToCacheModes=new Map,this._cacheKeysToIntegrities=new Map,this._strategy=new p({cacheName:b.getPrecacheName(e),plugins:[...t,new Ie({precacheController:this})],fallbackToNetwork:n}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this._strategy}precache(e){this.addToCacheList(e),this._installAndActiveListenersAdded||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this._installAndActiveListenersAdded=!0)}addToCacheList(e){const t=[];for(const n of e){typeof n=="string"?t.push(n):n&&n.revision===void 0&&t.push(n.url);const{cacheKey:a,url:r}=Pe(n),i=typeof n!="string"&&n.revision?"reload":"default";if(this._urlsToCacheKeys.has(r)&&this._urlsToCacheKeys.get(r)!==a)throw new l("add-to-cache-list-conflicting-entries",{firstEntry:this._urlsToCacheKeys.get(r),secondEntry:a});if(typeof n!="string"&&n.integrity){if(this._cacheKeysToIntegrities.has(a)&&this._cacheKeysToIntegrities.get(a)!==n.integrity)throw new l("add-to-cache-list-conflicting-integrities",{url:r});this._cacheKeysToIntegrities.set(a,n.integrity)}if(this._urlsToCacheKeys.set(r,a),this._urlsToCacheModes.set(r,i),t.length>0){const c=`Workbox is precaching URLs without revision info: ${t.join(", ")} +This is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(c)}}}install(e){return K(e,async()=>{const t=new ke;this.strategy.plugins.push(t);for(const[r,i]of this._urlsToCacheKeys){const c=this._cacheKeysToIntegrities.get(i),o=this._urlsToCacheModes.get(r),h=new Request(r,{integrity:c,cache:o,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:i},request:h,event:e}))}const{updatedURLs:n,notUpdatedURLs:a}=t;return{updatedURLs:n,notUpdatedURLs:a}})}activate(e){return K(e,async()=>{const t=await self.caches.open(this.strategy.cacheName),n=await t.keys(),a=new Set(this._urlsToCacheKeys.values()),r=[];for(const i of n)a.has(i.url)||(await t.delete(i),r.push(i.url));return{deletedURLs:r}})}getURLsToCacheKeys(){return this._urlsToCacheKeys}getCachedURLs(){return[...this._urlsToCacheKeys.keys()]}getCacheKeyForURL(e){const t=new URL(e,location.href);return this._urlsToCacheKeys.get(t.href)}getIntegrityForCacheKey(e){return this._cacheKeysToIntegrities.get(e)}async matchPrecache(e){const t=e instanceof Request?e.url:e,n=this.getCacheKeyForURL(t);if(n)return(await self.caches.open(this.strategy.cacheName)).match(n)}createHandlerBoundToURL(e){const t=this.getCacheKeyForURL(e);if(!t)throw new l("non-precached-url",{url:e});return n=>(n.request=new Request(e),n.params=Object.assign({cacheKey:t},n.params),this.strategy.handle(n))}}let M;const Q=()=>(M||(M=new Se),M);function Me(s,e=[]){for(const t of[...s.searchParams.keys()])e.some(n=>n.test(t))&&s.searchParams.delete(t);return s}function*Ne(s,{ignoreURLParametersMatching:e=[/^utm_/,/^fbclid$/],directoryIndex:t="index.html",cleanURLs:n=!0,urlManipulation:a}={}){const r=new URL(s,location.href);r.hash="",yield r.href;const i=Me(r,e);if(yield i.href,t&&i.pathname.endsWith("/")){const c=new URL(i.href);c.pathname+=t,yield c.href}if(n){const c=new URL(i.href);c.pathname+=".html",yield c.href}if(a){const c=a({url:r});for(const o of c)yield o.href}}class ve extends m{constructor(e,t){const n=({request:a})=>{const r=e.getURLsToCacheKeys();for(const i of Ne(a.url,t)){const c=r.get(i);if(c){const o=e.getIntegrityForCacheKey(c);return{cacheKey:c,integrity:o}}}};super(n,e.strategy)}}function Oe(s){const e=Q(),t=new ve(e,s);D(t)}function Ke(s){Q().precache(s)}function Be(s,e){Ke(s),Oe(e)}const x={TIMEZONE:"Europe/Vienna",SEASON:new Date().getFullYear(),API_BASE:"https://api.hardbulls.com/",BULLS_LEAGUES:["bbl"],ASSET_JSON_CACHE_TTL:60*60,ASSET_IMAGE_CACHE_TTL:60*60*24};self.__WB_DISABLE_DEV_LOGS=!0,self.addEventListener("install",async s=>{await self.skipWaiting()}),ie(),Be(self.__WB_MANIFEST),D(new RegExp(`^${W(x.API_BASE)}api/.*\\.json$`),new fe({cacheName:"api-json-cache",plugins:[new G({purgeOnQuotaError:!0,maxAgeSeconds:x.ASSET_JSON_CACHE_TTL})]})),D(new RegExp(`^${W(x.API_BASE)}assets/.*\\.(?:png|jpg|jpeg|svg|webp)$`),new ue({cacheName:"api-assets-cache-v1",plugins:[new G({maxAgeSeconds:x.ASSET_IMAGE_CACHE_TTL,purgeOnQuotaError:!0})]}))})(); diff --git a/_service-worker.js.map b/_service-worker.js.map deleted file mode 100644 index 6b37220..0000000 --- a/_service-worker.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../node_modules/workbox-core/_version.js","../node_modules/workbox-core/_private/logger.js","../node_modules/workbox-core/models/messages/messageGenerator.js","../node_modules/workbox-core/_private/WorkboxError.js","../node_modules/workbox-core/models/quotaErrorCallbacks.js","../node_modules/workbox-core/registerQuotaErrorCallback.js","../node_modules/workbox-core/_private/cacheNames.js","../node_modules/workbox-core/_private/cacheMatchIgnoreParams.js","../node_modules/workbox-core/_private/canConstructResponseFromBodyStream.js","../node_modules/workbox-core/_private/dontWaitFor.js","../node_modules/workbox-core/_private/Deferred.js","../node_modules/workbox-core/_private/executeQuotaErrorCallbacks.js","../node_modules/workbox-core/_private/getFriendlyURL.js","../node_modules/workbox-core/_private/timeout.js","../node_modules/workbox-core/_private/waitUntil.js","../node_modules/workbox-core/copyResponse.js","../node_modules/workbox-core/clientsClaim.js","../node_modules/workbox-routing/_version.js","../node_modules/workbox-routing/utils/constants.js","../node_modules/workbox-routing/utils/normalizeHandler.js","../node_modules/workbox-routing/Route.js","../node_modules/workbox-routing/RegExpRoute.js","../node_modules/workbox-routing/Router.js","../node_modules/workbox-routing/utils/getOrCreateDefaultRouter.js","../node_modules/workbox-routing/registerRoute.js","../node_modules/workbox-strategies/_version.js","../node_modules/workbox-strategies/StrategyHandler.js","../node_modules/workbox-strategies/Strategy.js","../node_modules/workbox-strategies/CacheFirst.js","../node_modules/workbox-strategies/plugins/cacheOkAndOpaquePlugin.js","../node_modules/workbox-strategies/StaleWhileRevalidate.js","../src/regex.ts","../node_modules/idb/build/wrap-idb-value.js","../node_modules/idb/build/index.js","../node_modules/workbox-expiration/_version.js","../node_modules/workbox-expiration/models/CacheTimestampsModel.js","../node_modules/workbox-expiration/CacheExpiration.js","../node_modules/workbox-expiration/ExpirationPlugin.js","../node_modules/workbox-precaching/_version.js","../node_modules/workbox-precaching/utils/createCacheKey.js","../node_modules/workbox-precaching/utils/PrecacheInstallReportPlugin.js","../node_modules/workbox-precaching/utils/PrecacheCacheKeyPlugin.js","../node_modules/workbox-precaching/PrecacheStrategy.js","../node_modules/workbox-precaching/PrecacheController.js","../node_modules/workbox-precaching/utils/getOrCreatePrecacheController.js","../node_modules/workbox-precaching/utils/removeIgnoredSearchParams.js","../node_modules/workbox-precaching/utils/generateURLVariations.js","../node_modules/workbox-precaching/PrecacheRoute.js","../node_modules/workbox-precaching/addRoute.js","../node_modules/workbox-precaching/precache.js","../node_modules/workbox-precaching/precacheAndRoute.js","../src/config.ts","../src/service-worker.ts"],"names":["error"],"mappings":"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","file":"service-worker.js","sourcesContent":["\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:core:7.2.0'] && _();\n}\ncatch (e) { }\n","/*\n Copyright 2019 Google LLC\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nconst logger = (process.env.NODE_ENV === 'production'\n ? null\n : (() => {\n // Don't overwrite this value if it's already set.\n // See https://github.com/GoogleChrome/workbox/pull/2284#issuecomment-560470923\n if (!('__WB_DISABLE_DEV_LOGS' in globalThis)) {\n self.__WB_DISABLE_DEV_LOGS = false;\n }\n let inGroup = false;\n const methodToColorMap = {\n debug: `#7f8c8d`,\n log: `#2ecc71`,\n warn: `#f39c12`,\n error: `#c0392b`,\n groupCollapsed: `#3498db`,\n groupEnd: null, // No colored prefix on groupEnd\n };\n const print = function (method, args) {\n if (self.__WB_DISABLE_DEV_LOGS) {\n return;\n }\n if (method === 'groupCollapsed') {\n // Safari doesn't print all console.groupCollapsed() arguments:\n // https://bugs.webkit.org/show_bug.cgi?id=182754\n if (/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n console[method](...args);\n return;\n }\n }\n const styles = [\n `background: ${methodToColorMap[method]}`,\n `border-radius: 0.5em`,\n `color: white`,\n `font-weight: bold`,\n `padding: 2px 0.5em`,\n ];\n // When in a group, the workbox prefix is not displayed.\n const logPrefix = inGroup ? [] : ['%cworkbox', styles.join(';')];\n console[method](...logPrefix, ...args);\n if (method === 'groupCollapsed') {\n inGroup = true;\n }\n if (method === 'groupEnd') {\n inGroup = false;\n }\n };\n // eslint-disable-next-line @typescript-eslint/ban-types\n const api = {};\n const loggerMethods = Object.keys(methodToColorMap);\n for (const key of loggerMethods) {\n const method = key;\n api[method] = (...args) => {\n print(method, args);\n };\n }\n return api;\n })());\nexport { logger };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { messages } from './messages.js';\nimport '../../_version.js';\nconst fallback = (code, ...args) => {\n let msg = code;\n if (args.length > 0) {\n msg += ` :: ${JSON.stringify(args)}`;\n }\n return msg;\n};\nconst generatorFunction = (code, details = {}) => {\n const message = messages[code];\n if (!message) {\n throw new Error(`Unable to find message for code '${code}'.`);\n }\n return message(details);\n};\nexport const messageGenerator = process.env.NODE_ENV === 'production' ? fallback : generatorFunction;\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { messageGenerator } from '../models/messages/messageGenerator.js';\nimport '../_version.js';\n/**\n * Workbox errors should be thrown with this class.\n * This allows use to ensure the type easily in tests,\n * helps developers identify errors from workbox\n * easily and allows use to optimise error\n * messages correctly.\n *\n * @private\n */\nclass WorkboxError extends Error {\n /**\n *\n * @param {string} errorCode The error code that\n * identifies this particular error.\n * @param {Object=} details Any relevant arguments\n * that will help developers identify issues should\n * be added as a key on the context object.\n */\n constructor(errorCode, details) {\n const message = messageGenerator(errorCode, details);\n super(message);\n this.name = errorCode;\n this.details = details;\n }\n}\nexport { WorkboxError };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n// Callbacks to be executed whenever there's a quota error.\n// Can't change Function type right now.\n// eslint-disable-next-line @typescript-eslint/ban-types\nconst quotaErrorCallbacks = new Set();\nexport { quotaErrorCallbacks };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { logger } from './_private/logger.js';\nimport { assert } from './_private/assert.js';\nimport { quotaErrorCallbacks } from './models/quotaErrorCallbacks.js';\nimport './_version.js';\n/**\n * Adds a function to the set of quotaErrorCallbacks that will be executed if\n * there's a quota error.\n *\n * @param {Function} callback\n * @memberof workbox-core\n */\n// Can't change Function type\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction registerQuotaErrorCallback(callback) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isType(callback, 'function', {\n moduleName: 'workbox-core',\n funcName: 'register',\n paramName: 'callback',\n });\n }\n quotaErrorCallbacks.add(callback);\n if (process.env.NODE_ENV !== 'production') {\n logger.log('Registered a callback to respond to quota errors.', callback);\n }\n}\nexport { registerQuotaErrorCallback };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nconst _cacheNameDetails = {\n googleAnalytics: 'googleAnalytics',\n precache: 'precache-v2',\n prefix: 'workbox',\n runtime: 'runtime',\n suffix: typeof registration !== 'undefined' ? registration.scope : '',\n};\nconst _createCacheName = (cacheName) => {\n return [_cacheNameDetails.prefix, cacheName, _cacheNameDetails.suffix]\n .filter((value) => value && value.length > 0)\n .join('-');\n};\nconst eachCacheNameDetail = (fn) => {\n for (const key of Object.keys(_cacheNameDetails)) {\n fn(key);\n }\n};\nexport const cacheNames = {\n updateDetails: (details) => {\n eachCacheNameDetail((key) => {\n if (typeof details[key] === 'string') {\n _cacheNameDetails[key] = details[key];\n }\n });\n },\n getGoogleAnalyticsName: (userCacheName) => {\n return userCacheName || _createCacheName(_cacheNameDetails.googleAnalytics);\n },\n getPrecacheName: (userCacheName) => {\n return userCacheName || _createCacheName(_cacheNameDetails.precache);\n },\n getPrefix: () => {\n return _cacheNameDetails.prefix;\n },\n getRuntimeName: (userCacheName) => {\n return userCacheName || _createCacheName(_cacheNameDetails.runtime);\n },\n getSuffix: () => {\n return _cacheNameDetails.suffix;\n },\n};\n","/*\n Copyright 2020 Google LLC\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nfunction stripParams(fullURL, ignoreParams) {\n const strippedURL = new URL(fullURL);\n for (const param of ignoreParams) {\n strippedURL.searchParams.delete(param);\n }\n return strippedURL.href;\n}\n/**\n * Matches an item in the cache, ignoring specific URL params. This is similar\n * to the `ignoreSearch` option, but it allows you to ignore just specific\n * params (while continuing to match on the others).\n *\n * @private\n * @param {Cache} cache\n * @param {Request} request\n * @param {Object} matchOptions\n * @param {Array} ignoreParams\n * @return {Promise}\n */\nasync function cacheMatchIgnoreParams(cache, request, ignoreParams, matchOptions) {\n const strippedRequestURL = stripParams(request.url, ignoreParams);\n // If the request doesn't include any ignored params, match as normal.\n if (request.url === strippedRequestURL) {\n return cache.match(request, matchOptions);\n }\n // Otherwise, match by comparing keys\n const keysOptions = Object.assign(Object.assign({}, matchOptions), { ignoreSearch: true });\n const cacheKeys = await cache.keys(request, keysOptions);\n for (const cacheKey of cacheKeys) {\n const strippedCacheKeyURL = stripParams(cacheKey.url, ignoreParams);\n if (strippedRequestURL === strippedCacheKeyURL) {\n return cache.match(cacheKey, matchOptions);\n }\n }\n return;\n}\nexport { cacheMatchIgnoreParams };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nlet supportStatus;\n/**\n * A utility function that determines whether the current browser supports\n * constructing a new `Response` from a `response.body` stream.\n *\n * @return {boolean} `true`, if the current browser can successfully\n * construct a `Response` from a `response.body` stream, `false` otherwise.\n *\n * @private\n */\nfunction canConstructResponseFromBodyStream() {\n if (supportStatus === undefined) {\n const testResponse = new Response('');\n if ('body' in testResponse) {\n try {\n new Response(testResponse.body);\n supportStatus = true;\n }\n catch (error) {\n supportStatus = false;\n }\n }\n supportStatus = false;\n }\n return supportStatus;\n}\nexport { canConstructResponseFromBodyStream };\n","/*\n Copyright 2019 Google LLC\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * A helper function that prevents a promise from being flagged as unused.\n *\n * @private\n **/\nexport function dontWaitFor(promise) {\n // Effective no-op.\n void promise.then(() => { });\n}\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * The Deferred class composes Promises in a way that allows for them to be\n * resolved or rejected from outside the constructor. In most cases promises\n * should be used directly, but Deferreds can be necessary when the logic to\n * resolve a promise must be separate.\n *\n * @private\n */\nclass Deferred {\n /**\n * Creates a promise and exposes its resolve and reject functions as methods.\n */\n constructor() {\n this.promise = new Promise((resolve, reject) => {\n this.resolve = resolve;\n this.reject = reject;\n });\n }\n}\nexport { Deferred };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { logger } from '../_private/logger.js';\nimport { quotaErrorCallbacks } from '../models/quotaErrorCallbacks.js';\nimport '../_version.js';\n/**\n * Runs all of the callback functions, one at a time sequentially, in the order\n * in which they were registered.\n *\n * @memberof workbox-core\n * @private\n */\nasync function executeQuotaErrorCallbacks() {\n if (process.env.NODE_ENV !== 'production') {\n logger.log(`About to run ${quotaErrorCallbacks.size} ` +\n `callbacks to clean up caches.`);\n }\n for (const callback of quotaErrorCallbacks) {\n await callback();\n if (process.env.NODE_ENV !== 'production') {\n logger.log(callback, 'is complete.');\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n logger.log('Finished running callbacks.');\n }\n}\nexport { executeQuotaErrorCallbacks };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nconst getFriendlyURL = (url) => {\n const urlObj = new URL(String(url), location.href);\n // See https://github.com/GoogleChrome/workbox/issues/2323\n // We want to include everything, except for the origin if it's same-origin.\n return urlObj.href.replace(new RegExp(`^${location.origin}`), '');\n};\nexport { getFriendlyURL };\n","/*\n Copyright 2019 Google LLC\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * Returns a promise that resolves and the passed number of milliseconds.\n * This utility is an async/await-friendly version of `setTimeout`.\n *\n * @param {number} ms\n * @return {Promise}\n * @private\n */\nexport function timeout(ms) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n","/*\n Copyright 2020 Google LLC\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * A utility method that makes it easier to use `event.waitUntil` with\n * async functions and return the result.\n *\n * @param {ExtendableEvent} event\n * @param {Function} asyncFn\n * @return {Function}\n * @private\n */\nfunction waitUntil(event, asyncFn) {\n const returnPromise = asyncFn();\n event.waitUntil(returnPromise);\n return returnPromise;\n}\nexport { waitUntil };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { canConstructResponseFromBodyStream } from './_private/canConstructResponseFromBodyStream.js';\nimport { WorkboxError } from './_private/WorkboxError.js';\nimport './_version.js';\n/**\n * Allows developers to copy a response and modify its `headers`, `status`,\n * or `statusText` values (the values settable via a\n * [`ResponseInit`]{@link https://developer.mozilla.org/en-US/docs/Web/API/Response/Response#Syntax}\n * object in the constructor).\n * To modify these values, pass a function as the second argument. That\n * function will be invoked with a single object with the response properties\n * `{headers, status, statusText}`. The return value of this function will\n * be used as the `ResponseInit` for the new `Response`. To change the values\n * either modify the passed parameter(s) and return it, or return a totally\n * new object.\n *\n * This method is intentionally limited to same-origin responses, regardless of\n * whether CORS was used or not.\n *\n * @param {Response} response\n * @param {Function} modifier\n * @memberof workbox-core\n */\nasync function copyResponse(response, modifier) {\n let origin = null;\n // If response.url isn't set, assume it's cross-origin and keep origin null.\n if (response.url) {\n const responseURL = new URL(response.url);\n origin = responseURL.origin;\n }\n if (origin !== self.location.origin) {\n throw new WorkboxError('cross-origin-copy-response', { origin });\n }\n const clonedResponse = response.clone();\n // Create a fresh `ResponseInit` object by cloning the headers.\n const responseInit = {\n headers: new Headers(clonedResponse.headers),\n status: clonedResponse.status,\n statusText: clonedResponse.statusText,\n };\n // Apply any user modifications.\n const modifiedResponseInit = modifier ? modifier(responseInit) : responseInit;\n // Create the new response from the body stream and `ResponseInit`\n // modifications. Note: not all browsers support the Response.body stream,\n // so fall back to reading the entire body into memory as a blob.\n const body = canConstructResponseFromBodyStream()\n ? clonedResponse.body\n : await clonedResponse.blob();\n return new Response(body, modifiedResponseInit);\n}\nexport { copyResponse };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport './_version.js';\n/**\n * Claim any currently available clients once the service worker\n * becomes active. This is normally used in conjunction with `skipWaiting()`.\n *\n * @memberof workbox-core\n */\nfunction clientsClaim() {\n self.addEventListener('activate', () => self.clients.claim());\n}\nexport { clientsClaim };\n","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:routing:7.2.0'] && _();\n}\ncatch (e) { }\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * The default HTTP method, 'GET', used when there's no specific method\n * configured for a route.\n *\n * @type {string}\n *\n * @private\n */\nexport const defaultMethod = 'GET';\n/**\n * The list of valid HTTP methods associated with requests that could be routed.\n *\n * @type {Array}\n *\n * @private\n */\nexport const validMethods = [\n 'DELETE',\n 'GET',\n 'HEAD',\n 'PATCH',\n 'POST',\n 'PUT',\n];\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport '../_version.js';\n/**\n * @param {function()|Object} handler Either a function, or an object with a\n * 'handle' method.\n * @return {Object} An object with a handle method.\n *\n * @private\n */\nexport const normalizeHandler = (handler) => {\n if (handler && typeof handler === 'object') {\n if (process.env.NODE_ENV !== 'production') {\n assert.hasMethod(handler, 'handle', {\n moduleName: 'workbox-routing',\n className: 'Route',\n funcName: 'constructor',\n paramName: 'handler',\n });\n }\n return handler;\n }\n else {\n if (process.env.NODE_ENV !== 'production') {\n assert.isType(handler, 'function', {\n moduleName: 'workbox-routing',\n className: 'Route',\n funcName: 'constructor',\n paramName: 'handler',\n });\n }\n return { handle: handler };\n }\n};\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { defaultMethod, validMethods } from './utils/constants.js';\nimport { normalizeHandler } from './utils/normalizeHandler.js';\nimport './_version.js';\n/**\n * A `Route` consists of a pair of callback functions, \"match\" and \"handler\".\n * The \"match\" callback determine if a route should be used to \"handle\" a\n * request by returning a non-falsy value if it can. The \"handler\" callback\n * is called when there is a match and should return a Promise that resolves\n * to a `Response`.\n *\n * @memberof workbox-routing\n */\nclass Route {\n /**\n * Constructor for Route class.\n *\n * @param {workbox-routing~matchCallback} match\n * A callback function that determines whether the route matches a given\n * `fetch` event by returning a non-falsy value.\n * @param {workbox-routing~handlerCallback} handler A callback\n * function that returns a Promise resolving to a Response.\n * @param {string} [method='GET'] The HTTP method to match the Route\n * against.\n */\n constructor(match, handler, method = defaultMethod) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isType(match, 'function', {\n moduleName: 'workbox-routing',\n className: 'Route',\n funcName: 'constructor',\n paramName: 'match',\n });\n if (method) {\n assert.isOneOf(method, validMethods, { paramName: 'method' });\n }\n }\n // These values are referenced directly by Router so cannot be\n // altered by minificaton.\n this.handler = normalizeHandler(handler);\n this.match = match;\n this.method = method;\n }\n /**\n *\n * @param {workbox-routing-handlerCallback} handler A callback\n * function that returns a Promise resolving to a Response\n */\n setCatchHandler(handler) {\n this.catchHandler = normalizeHandler(handler);\n }\n}\nexport { Route };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { Route } from './Route.js';\nimport './_version.js';\n/**\n * RegExpRoute makes it easy to create a regular expression based\n * {@link workbox-routing.Route}.\n *\n * For same-origin requests the RegExp only needs to match part of the URL. For\n * requests against third-party servers, you must define a RegExp that matches\n * the start of the URL.\n *\n * @memberof workbox-routing\n * @extends workbox-routing.Route\n */\nclass RegExpRoute extends Route {\n /**\n * If the regular expression contains\n * [capture groups]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#grouping-back-references},\n * the captured values will be passed to the\n * {@link workbox-routing~handlerCallback} `params`\n * argument.\n *\n * @param {RegExp} regExp The regular expression to match against URLs.\n * @param {workbox-routing~handlerCallback} handler A callback\n * function that returns a Promise resulting in a Response.\n * @param {string} [method='GET'] The HTTP method to match the Route\n * against.\n */\n constructor(regExp, handler, method) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(regExp, RegExp, {\n moduleName: 'workbox-routing',\n className: 'RegExpRoute',\n funcName: 'constructor',\n paramName: 'pattern',\n });\n }\n const match = ({ url }) => {\n const result = regExp.exec(url.href);\n // Return immediately if there's no match.\n if (!result) {\n return;\n }\n // Require that the match start at the first character in the URL string\n // if it's a cross-origin request.\n // See https://github.com/GoogleChrome/workbox/issues/281 for the context\n // behind this behavior.\n if (url.origin !== location.origin && result.index !== 0) {\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`The regular expression '${regExp.toString()}' only partially matched ` +\n `against the cross-origin URL '${url.toString()}'. RegExpRoute's will only ` +\n `handle cross-origin requests if they match the entire URL.`);\n }\n return;\n }\n // If the route matches, but there aren't any capture groups defined, then\n // this will return [], which is truthy and therefore sufficient to\n // indicate a match.\n // If there are capture groups, then it will return their values.\n return result.slice(1);\n };\n super(match, handler, method);\n }\n}\nexport { RegExpRoute };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { defaultMethod } from './utils/constants.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { normalizeHandler } from './utils/normalizeHandler.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport './_version.js';\n/**\n * The Router can be used to process a `FetchEvent` using one or more\n * {@link workbox-routing.Route}, responding with a `Response` if\n * a matching route exists.\n *\n * If no route matches a given a request, the Router will use a \"default\"\n * handler if one is defined.\n *\n * Should the matching Route throw an error, the Router will use a \"catch\"\n * handler if one is defined to gracefully deal with issues and respond with a\n * Request.\n *\n * If a request matches multiple routes, the **earliest** registered route will\n * be used to respond to the request.\n *\n * @memberof workbox-routing\n */\nclass Router {\n /**\n * Initializes a new Router.\n */\n constructor() {\n this._routes = new Map();\n this._defaultHandlerMap = new Map();\n }\n /**\n * @return {Map>} routes A `Map` of HTTP\n * method name ('GET', etc.) to an array of all the corresponding `Route`\n * instances that are registered.\n */\n get routes() {\n return this._routes;\n }\n /**\n * Adds a fetch event listener to respond to events when a route matches\n * the event's request.\n */\n addFetchListener() {\n // See https://github.com/Microsoft/TypeScript/issues/28357#issuecomment-436484705\n self.addEventListener('fetch', ((event) => {\n const { request } = event;\n const responsePromise = this.handleRequest({ request, event });\n if (responsePromise) {\n event.respondWith(responsePromise);\n }\n }));\n }\n /**\n * Adds a message event listener for URLs to cache from the window.\n * This is useful to cache resources loaded on the page prior to when the\n * service worker started controlling it.\n *\n * The format of the message data sent from the window should be as follows.\n * Where the `urlsToCache` array may consist of URL strings or an array of\n * URL string + `requestInit` object (the same as you'd pass to `fetch()`).\n *\n * ```\n * {\n * type: 'CACHE_URLS',\n * payload: {\n * urlsToCache: [\n * './script1.js',\n * './script2.js',\n * ['./script3.js', {mode: 'no-cors'}],\n * ],\n * },\n * }\n * ```\n */\n addCacheListener() {\n // See https://github.com/Microsoft/TypeScript/issues/28357#issuecomment-436484705\n self.addEventListener('message', ((event) => {\n // event.data is type 'any'\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (event.data && event.data.type === 'CACHE_URLS') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const { payload } = event.data;\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Caching URLs from the window`, payload.urlsToCache);\n }\n const requestPromises = Promise.all(payload.urlsToCache.map((entry) => {\n if (typeof entry === 'string') {\n entry = [entry];\n }\n const request = new Request(...entry);\n return this.handleRequest({ request, event });\n // TODO(philipwalton): TypeScript errors without this typecast for\n // some reason (probably a bug). The real type here should work but\n // doesn't: `Array | undefined>`.\n })); // TypeScript\n event.waitUntil(requestPromises);\n // If a MessageChannel was used, reply to the message on success.\n if (event.ports && event.ports[0]) {\n void requestPromises.then(() => event.ports[0].postMessage(true));\n }\n }\n }));\n }\n /**\n * Apply the routing rules to a FetchEvent object to get a Response from an\n * appropriate Route's handler.\n *\n * @param {Object} options\n * @param {Request} options.request The request to handle.\n * @param {ExtendableEvent} options.event The event that triggered the\n * request.\n * @return {Promise|undefined} A promise is returned if a\n * registered route can handle the request. If there is no matching\n * route and there's no `defaultHandler`, `undefined` is returned.\n */\n handleRequest({ request, event, }) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(request, Request, {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'handleRequest',\n paramName: 'options.request',\n });\n }\n const url = new URL(request.url, location.href);\n if (!url.protocol.startsWith('http')) {\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Workbox Router only supports URLs that start with 'http'.`);\n }\n return;\n }\n const sameOrigin = url.origin === location.origin;\n const { params, route } = this.findMatchingRoute({\n event,\n request,\n sameOrigin,\n url,\n });\n let handler = route && route.handler;\n const debugMessages = [];\n if (process.env.NODE_ENV !== 'production') {\n if (handler) {\n debugMessages.push([`Found a route to handle this request:`, route]);\n if (params) {\n debugMessages.push([\n `Passing the following params to the route's handler:`,\n params,\n ]);\n }\n }\n }\n // If we don't have a handler because there was no matching route, then\n // fall back to defaultHandler if that's defined.\n const method = request.method;\n if (!handler && this._defaultHandlerMap.has(method)) {\n if (process.env.NODE_ENV !== 'production') {\n debugMessages.push(`Failed to find a matching route. Falling ` +\n `back to the default handler for ${method}.`);\n }\n handler = this._defaultHandlerMap.get(method);\n }\n if (!handler) {\n if (process.env.NODE_ENV !== 'production') {\n // No handler so Workbox will do nothing. If logs is set of debug\n // i.e. verbose, we should print out this information.\n logger.debug(`No route found for: ${getFriendlyURL(url)}`);\n }\n return;\n }\n if (process.env.NODE_ENV !== 'production') {\n // We have a handler, meaning Workbox is going to handle the route.\n // print the routing details to the console.\n logger.groupCollapsed(`Router is responding to: ${getFriendlyURL(url)}`);\n debugMessages.forEach((msg) => {\n if (Array.isArray(msg)) {\n logger.log(...msg);\n }\n else {\n logger.log(msg);\n }\n });\n logger.groupEnd();\n }\n // Wrap in try and catch in case the handle method throws a synchronous\n // error. It should still callback to the catch handler.\n let responsePromise;\n try {\n responsePromise = handler.handle({ url, request, event, params });\n }\n catch (err) {\n responsePromise = Promise.reject(err);\n }\n // Get route's catch handler, if it exists\n const catchHandler = route && route.catchHandler;\n if (responsePromise instanceof Promise &&\n (this._catchHandler || catchHandler)) {\n responsePromise = responsePromise.catch(async (err) => {\n // If there's a route catch handler, process that first\n if (catchHandler) {\n if (process.env.NODE_ENV !== 'production') {\n // Still include URL here as it will be async from the console group\n // and may not make sense without the URL\n logger.groupCollapsed(`Error thrown when responding to: ` +\n ` ${getFriendlyURL(url)}. Falling back to route's Catch Handler.`);\n logger.error(`Error thrown by:`, route);\n logger.error(err);\n logger.groupEnd();\n }\n try {\n return await catchHandler.handle({ url, request, event, params });\n }\n catch (catchErr) {\n if (catchErr instanceof Error) {\n err = catchErr;\n }\n }\n }\n if (this._catchHandler) {\n if (process.env.NODE_ENV !== 'production') {\n // Still include URL here as it will be async from the console group\n // and may not make sense without the URL\n logger.groupCollapsed(`Error thrown when responding to: ` +\n ` ${getFriendlyURL(url)}. Falling back to global Catch Handler.`);\n logger.error(`Error thrown by:`, route);\n logger.error(err);\n logger.groupEnd();\n }\n return this._catchHandler.handle({ url, request, event });\n }\n throw err;\n });\n }\n return responsePromise;\n }\n /**\n * Checks a request and URL (and optionally an event) against the list of\n * registered routes, and if there's a match, returns the corresponding\n * route along with any params generated by the match.\n *\n * @param {Object} options\n * @param {URL} options.url\n * @param {boolean} options.sameOrigin The result of comparing `url.origin`\n * against the current origin.\n * @param {Request} options.request The request to match.\n * @param {Event} options.event The corresponding event.\n * @return {Object} An object with `route` and `params` properties.\n * They are populated if a matching route was found or `undefined`\n * otherwise.\n */\n findMatchingRoute({ url, sameOrigin, request, event, }) {\n const routes = this._routes.get(request.method) || [];\n for (const route of routes) {\n let params;\n // route.match returns type any, not possible to change right now.\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const matchResult = route.match({ url, sameOrigin, request, event });\n if (matchResult) {\n if (process.env.NODE_ENV !== 'production') {\n // Warn developers that using an async matchCallback is almost always\n // not the right thing to do.\n if (matchResult instanceof Promise) {\n logger.warn(`While routing ${getFriendlyURL(url)}, an async ` +\n `matchCallback function was used. Please convert the ` +\n `following route to use a synchronous matchCallback function:`, route);\n }\n }\n // See https://github.com/GoogleChrome/workbox/issues/2079\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n params = matchResult;\n if (Array.isArray(params) && params.length === 0) {\n // Instead of passing an empty array in as params, use undefined.\n params = undefined;\n }\n else if (matchResult.constructor === Object && // eslint-disable-line\n Object.keys(matchResult).length === 0) {\n // Instead of passing an empty object in as params, use undefined.\n params = undefined;\n }\n else if (typeof matchResult === 'boolean') {\n // For the boolean value true (rather than just something truth-y),\n // don't set params.\n // See https://github.com/GoogleChrome/workbox/pull/2134#issuecomment-513924353\n params = undefined;\n }\n // Return early if have a match.\n return { route, params };\n }\n }\n // If no match was found above, return and empty object.\n return {};\n }\n /**\n * Define a default `handler` that's called when no routes explicitly\n * match the incoming request.\n *\n * Each HTTP method ('GET', 'POST', etc.) gets its own default handler.\n *\n * Without a default handler, unmatched requests will go against the\n * network as if there were no service worker present.\n *\n * @param {workbox-routing~handlerCallback} handler A callback\n * function that returns a Promise resulting in a Response.\n * @param {string} [method='GET'] The HTTP method to associate with this\n * default handler. Each method has its own default.\n */\n setDefaultHandler(handler, method = defaultMethod) {\n this._defaultHandlerMap.set(method, normalizeHandler(handler));\n }\n /**\n * If a Route throws an error while handling a request, this `handler`\n * will be called and given a chance to provide a response.\n *\n * @param {workbox-routing~handlerCallback} handler A callback\n * function that returns a Promise resulting in a Response.\n */\n setCatchHandler(handler) {\n this._catchHandler = normalizeHandler(handler);\n }\n /**\n * Registers a route with the router.\n *\n * @param {workbox-routing.Route} route The route to register.\n */\n registerRoute(route) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isType(route, 'object', {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'registerRoute',\n paramName: 'route',\n });\n assert.hasMethod(route, 'match', {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'registerRoute',\n paramName: 'route',\n });\n assert.isType(route.handler, 'object', {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'registerRoute',\n paramName: 'route',\n });\n assert.hasMethod(route.handler, 'handle', {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'registerRoute',\n paramName: 'route.handler',\n });\n assert.isType(route.method, 'string', {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'registerRoute',\n paramName: 'route.method',\n });\n }\n if (!this._routes.has(route.method)) {\n this._routes.set(route.method, []);\n }\n // Give precedence to all of the earlier routes by adding this additional\n // route to the end of the array.\n this._routes.get(route.method).push(route);\n }\n /**\n * Unregisters a route with the router.\n *\n * @param {workbox-routing.Route} route The route to unregister.\n */\n unregisterRoute(route) {\n if (!this._routes.has(route.method)) {\n throw new WorkboxError('unregister-route-but-not-found-with-method', {\n method: route.method,\n });\n }\n const routeIndex = this._routes.get(route.method).indexOf(route);\n if (routeIndex > -1) {\n this._routes.get(route.method).splice(routeIndex, 1);\n }\n else {\n throw new WorkboxError('unregister-route-route-not-registered');\n }\n }\n}\nexport { Router };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { Router } from '../Router.js';\nimport '../_version.js';\nlet defaultRouter;\n/**\n * Creates a new, singleton Router instance if one does not exist. If one\n * does already exist, that instance is returned.\n *\n * @private\n * @return {Router}\n */\nexport const getOrCreateDefaultRouter = () => {\n if (!defaultRouter) {\n defaultRouter = new Router();\n // The helpers that use the default Router assume these listeners exist.\n defaultRouter.addFetchListener();\n defaultRouter.addCacheListener();\n }\n return defaultRouter;\n};\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { Route } from './Route.js';\nimport { RegExpRoute } from './RegExpRoute.js';\nimport { getOrCreateDefaultRouter } from './utils/getOrCreateDefaultRouter.js';\nimport './_version.js';\n/**\n * Easily register a RegExp, string, or function with a caching\n * strategy to a singleton Router instance.\n *\n * This method will generate a Route for you if needed and\n * call {@link workbox-routing.Router#registerRoute}.\n *\n * @param {RegExp|string|workbox-routing.Route~matchCallback|workbox-routing.Route} capture\n * If the capture param is a `Route`, all other arguments will be ignored.\n * @param {workbox-routing~handlerCallback} [handler] A callback\n * function that returns a Promise resulting in a Response. This parameter\n * is required if `capture` is not a `Route` object.\n * @param {string} [method='GET'] The HTTP method to match the Route\n * against.\n * @return {workbox-routing.Route} The generated `Route`.\n *\n * @memberof workbox-routing\n */\nfunction registerRoute(capture, handler, method) {\n let route;\n if (typeof capture === 'string') {\n const captureUrl = new URL(capture, location.href);\n if (process.env.NODE_ENV !== 'production') {\n if (!(capture.startsWith('/') || capture.startsWith('http'))) {\n throw new WorkboxError('invalid-string', {\n moduleName: 'workbox-routing',\n funcName: 'registerRoute',\n paramName: 'capture',\n });\n }\n // We want to check if Express-style wildcards are in the pathname only.\n // TODO: Remove this log message in v4.\n const valueToCheck = capture.startsWith('http')\n ? captureUrl.pathname\n : capture;\n // See https://github.com/pillarjs/path-to-regexp#parameters\n const wildcards = '[*:?+]';\n if (new RegExp(`${wildcards}`).exec(valueToCheck)) {\n logger.debug(`The '$capture' parameter contains an Express-style wildcard ` +\n `character (${wildcards}). Strings are now always interpreted as ` +\n `exact matches; use a RegExp for partial or wildcard matches.`);\n }\n }\n const matchCallback = ({ url }) => {\n if (process.env.NODE_ENV !== 'production') {\n if (url.pathname === captureUrl.pathname &&\n url.origin !== captureUrl.origin) {\n logger.debug(`${capture} only partially matches the cross-origin URL ` +\n `${url.toString()}. This route will only handle cross-origin requests ` +\n `if they match the entire URL.`);\n }\n }\n return url.href === captureUrl.href;\n };\n // If `capture` is a string then `handler` and `method` must be present.\n route = new Route(matchCallback, handler, method);\n }\n else if (capture instanceof RegExp) {\n // If `capture` is a `RegExp` then `handler` and `method` must be present.\n route = new RegExpRoute(capture, handler, method);\n }\n else if (typeof capture === 'function') {\n // If `capture` is a function then `handler` and `method` must be present.\n route = new Route(capture, handler, method);\n }\n else if (capture instanceof Route) {\n route = capture;\n }\n else {\n throw new WorkboxError('unsupported-route-type', {\n moduleName: 'workbox-routing',\n funcName: 'registerRoute',\n paramName: 'capture',\n });\n }\n const defaultRouter = getOrCreateDefaultRouter();\n defaultRouter.registerRoute(route);\n return route;\n}\nexport { registerRoute };\n","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:strategies:7.2.0'] && _();\n}\ncatch (e) { }\n","/*\n Copyright 2020 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { cacheMatchIgnoreParams } from 'workbox-core/_private/cacheMatchIgnoreParams.js';\nimport { Deferred } from 'workbox-core/_private/Deferred.js';\nimport { executeQuotaErrorCallbacks } from 'workbox-core/_private/executeQuotaErrorCallbacks.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { timeout } from 'workbox-core/_private/timeout.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport './_version.js';\nfunction toRequest(input) {\n return typeof input === 'string' ? new Request(input) : input;\n}\n/**\n * A class created every time a Strategy instance instance calls\n * {@link workbox-strategies.Strategy~handle} or\n * {@link workbox-strategies.Strategy~handleAll} that wraps all fetch and\n * cache actions around plugin callbacks and keeps track of when the strategy\n * is \"done\" (i.e. all added `event.waitUntil()` promises have resolved).\n *\n * @memberof workbox-strategies\n */\nclass StrategyHandler {\n /**\n * Creates a new instance associated with the passed strategy and event\n * that's handling the request.\n *\n * The constructor also initializes the state that will be passed to each of\n * the plugins handling this request.\n *\n * @param {workbox-strategies.Strategy} strategy\n * @param {Object} options\n * @param {Request|string} options.request A request to run this strategy for.\n * @param {ExtendableEvent} options.event The event associated with the\n * request.\n * @param {URL} [options.url]\n * @param {*} [options.params] The return value from the\n * {@link workbox-routing~matchCallback} (if applicable).\n */\n constructor(strategy, options) {\n this._cacheKeys = {};\n /**\n * The request the strategy is performing (passed to the strategy's\n * `handle()` or `handleAll()` method).\n * @name request\n * @instance\n * @type {Request}\n * @memberof workbox-strategies.StrategyHandler\n */\n /**\n * The event associated with this request.\n * @name event\n * @instance\n * @type {ExtendableEvent}\n * @memberof workbox-strategies.StrategyHandler\n */\n /**\n * A `URL` instance of `request.url` (if passed to the strategy's\n * `handle()` or `handleAll()` method).\n * Note: the `url` param will be present if the strategy was invoked\n * from a workbox `Route` object.\n * @name url\n * @instance\n * @type {URL|undefined}\n * @memberof workbox-strategies.StrategyHandler\n */\n /**\n * A `param` value (if passed to the strategy's\n * `handle()` or `handleAll()` method).\n * Note: the `param` param will be present if the strategy was invoked\n * from a workbox `Route` object and the\n * {@link workbox-routing~matchCallback} returned\n * a truthy value (it will be that value).\n * @name params\n * @instance\n * @type {*|undefined}\n * @memberof workbox-strategies.StrategyHandler\n */\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(options.event, ExtendableEvent, {\n moduleName: 'workbox-strategies',\n className: 'StrategyHandler',\n funcName: 'constructor',\n paramName: 'options.event',\n });\n }\n Object.assign(this, options);\n this.event = options.event;\n this._strategy = strategy;\n this._handlerDeferred = new Deferred();\n this._extendLifetimePromises = [];\n // Copy the plugins list (since it's mutable on the strategy),\n // so any mutations don't affect this handler instance.\n this._plugins = [...strategy.plugins];\n this._pluginStateMap = new Map();\n for (const plugin of this._plugins) {\n this._pluginStateMap.set(plugin, {});\n }\n this.event.waitUntil(this._handlerDeferred.promise);\n }\n /**\n * Fetches a given request (and invokes any applicable plugin callback\n * methods) using the `fetchOptions` (for non-navigation requests) and\n * `plugins` defined on the `Strategy` object.\n *\n * The following plugin lifecycle methods are invoked when using this method:\n * - `requestWillFetch()`\n * - `fetchDidSucceed()`\n * - `fetchDidFail()`\n *\n * @param {Request|string} input The URL or request to fetch.\n * @return {Promise}\n */\n async fetch(input) {\n const { event } = this;\n let request = toRequest(input);\n if (request.mode === 'navigate' &&\n event instanceof FetchEvent &&\n event.preloadResponse) {\n const possiblePreloadResponse = (await event.preloadResponse);\n if (possiblePreloadResponse) {\n if (process.env.NODE_ENV !== 'production') {\n logger.log(`Using a preloaded navigation response for ` +\n `'${getFriendlyURL(request.url)}'`);\n }\n return possiblePreloadResponse;\n }\n }\n // If there is a fetchDidFail plugin, we need to save a clone of the\n // original request before it's either modified by a requestWillFetch\n // plugin or before the original request's body is consumed via fetch().\n const originalRequest = this.hasCallback('fetchDidFail')\n ? request.clone()\n : null;\n try {\n for (const cb of this.iterateCallbacks('requestWillFetch')) {\n request = await cb({ request: request.clone(), event });\n }\n }\n catch (err) {\n if (err instanceof Error) {\n throw new WorkboxError('plugin-error-request-will-fetch', {\n thrownErrorMessage: err.message,\n });\n }\n }\n // The request can be altered by plugins with `requestWillFetch` making\n // the original request (most likely from a `fetch` event) different\n // from the Request we make. Pass both to `fetchDidFail` to aid debugging.\n const pluginFilteredRequest = request.clone();\n try {\n let fetchResponse;\n // See https://github.com/GoogleChrome/workbox/issues/1796\n fetchResponse = await fetch(request, request.mode === 'navigate' ? undefined : this._strategy.fetchOptions);\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Network request for ` +\n `'${getFriendlyURL(request.url)}' returned a response with ` +\n `status '${fetchResponse.status}'.`);\n }\n for (const callback of this.iterateCallbacks('fetchDidSucceed')) {\n fetchResponse = await callback({\n event,\n request: pluginFilteredRequest,\n response: fetchResponse,\n });\n }\n return fetchResponse;\n }\n catch (error) {\n if (process.env.NODE_ENV !== 'production') {\n logger.log(`Network request for ` +\n `'${getFriendlyURL(request.url)}' threw an error.`, error);\n }\n // `originalRequest` will only exist if a `fetchDidFail` callback\n // is being used (see above).\n if (originalRequest) {\n await this.runCallbacks('fetchDidFail', {\n error: error,\n event,\n originalRequest: originalRequest.clone(),\n request: pluginFilteredRequest.clone(),\n });\n }\n throw error;\n }\n }\n /**\n * Calls `this.fetch()` and (in the background) runs `this.cachePut()` on\n * the response generated by `this.fetch()`.\n *\n * The call to `this.cachePut()` automatically invokes `this.waitUntil()`,\n * so you do not have to manually call `waitUntil()` on the event.\n *\n * @param {Request|string} input The request or URL to fetch and cache.\n * @return {Promise}\n */\n async fetchAndCachePut(input) {\n const response = await this.fetch(input);\n const responseClone = response.clone();\n void this.waitUntil(this.cachePut(input, responseClone));\n return response;\n }\n /**\n * Matches a request from the cache (and invokes any applicable plugin\n * callback methods) using the `cacheName`, `matchOptions`, and `plugins`\n * defined on the strategy object.\n *\n * The following plugin lifecycle methods are invoked when using this method:\n * - cacheKeyWillBeUsed()\n * - cachedResponseWillBeUsed()\n *\n * @param {Request|string} key The Request or URL to use as the cache key.\n * @return {Promise} A matching response, if found.\n */\n async cacheMatch(key) {\n const request = toRequest(key);\n let cachedResponse;\n const { cacheName, matchOptions } = this._strategy;\n const effectiveRequest = await this.getCacheKey(request, 'read');\n const multiMatchOptions = Object.assign(Object.assign({}, matchOptions), { cacheName });\n cachedResponse = await caches.match(effectiveRequest, multiMatchOptions);\n if (process.env.NODE_ENV !== 'production') {\n if (cachedResponse) {\n logger.debug(`Found a cached response in '${cacheName}'.`);\n }\n else {\n logger.debug(`No cached response found in '${cacheName}'.`);\n }\n }\n for (const callback of this.iterateCallbacks('cachedResponseWillBeUsed')) {\n cachedResponse =\n (await callback({\n cacheName,\n matchOptions,\n cachedResponse,\n request: effectiveRequest,\n event: this.event,\n })) || undefined;\n }\n return cachedResponse;\n }\n /**\n * Puts a request/response pair in the cache (and invokes any applicable\n * plugin callback methods) using the `cacheName` and `plugins` defined on\n * the strategy object.\n *\n * The following plugin lifecycle methods are invoked when using this method:\n * - cacheKeyWillBeUsed()\n * - cacheWillUpdate()\n * - cacheDidUpdate()\n *\n * @param {Request|string} key The request or URL to use as the cache key.\n * @param {Response} response The response to cache.\n * @return {Promise} `false` if a cacheWillUpdate caused the response\n * not be cached, and `true` otherwise.\n */\n async cachePut(key, response) {\n const request = toRequest(key);\n // Run in the next task to avoid blocking other cache reads.\n // https://github.com/w3c/ServiceWorker/issues/1397\n await timeout(0);\n const effectiveRequest = await this.getCacheKey(request, 'write');\n if (process.env.NODE_ENV !== 'production') {\n if (effectiveRequest.method && effectiveRequest.method !== 'GET') {\n throw new WorkboxError('attempt-to-cache-non-get-request', {\n url: getFriendlyURL(effectiveRequest.url),\n method: effectiveRequest.method,\n });\n }\n // See https://github.com/GoogleChrome/workbox/issues/2818\n const vary = response.headers.get('Vary');\n if (vary) {\n logger.debug(`The response for ${getFriendlyURL(effectiveRequest.url)} ` +\n `has a 'Vary: ${vary}' header. ` +\n `Consider setting the {ignoreVary: true} option on your strategy ` +\n `to ensure cache matching and deletion works as expected.`);\n }\n }\n if (!response) {\n if (process.env.NODE_ENV !== 'production') {\n logger.error(`Cannot cache non-existent response for ` +\n `'${getFriendlyURL(effectiveRequest.url)}'.`);\n }\n throw new WorkboxError('cache-put-with-no-response', {\n url: getFriendlyURL(effectiveRequest.url),\n });\n }\n const responseToCache = await this._ensureResponseSafeToCache(response);\n if (!responseToCache) {\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Response '${getFriendlyURL(effectiveRequest.url)}' ` +\n `will not be cached.`, responseToCache);\n }\n return false;\n }\n const { cacheName, matchOptions } = this._strategy;\n const cache = await self.caches.open(cacheName);\n const hasCacheUpdateCallback = this.hasCallback('cacheDidUpdate');\n const oldResponse = hasCacheUpdateCallback\n ? await cacheMatchIgnoreParams(\n // TODO(philipwalton): the `__WB_REVISION__` param is a precaching\n // feature. Consider into ways to only add this behavior if using\n // precaching.\n cache, effectiveRequest.clone(), ['__WB_REVISION__'], matchOptions)\n : null;\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Updating the '${cacheName}' cache with a new Response ` +\n `for ${getFriendlyURL(effectiveRequest.url)}.`);\n }\n try {\n await cache.put(effectiveRequest, hasCacheUpdateCallback ? responseToCache.clone() : responseToCache);\n }\n catch (error) {\n if (error instanceof Error) {\n // See https://developer.mozilla.org/en-US/docs/Web/API/DOMException#exception-QuotaExceededError\n if (error.name === 'QuotaExceededError') {\n await executeQuotaErrorCallbacks();\n }\n throw error;\n }\n }\n for (const callback of this.iterateCallbacks('cacheDidUpdate')) {\n await callback({\n cacheName,\n oldResponse,\n newResponse: responseToCache.clone(),\n request: effectiveRequest,\n event: this.event,\n });\n }\n return true;\n }\n /**\n * Checks the list of plugins for the `cacheKeyWillBeUsed` callback, and\n * executes any of those callbacks found in sequence. The final `Request`\n * object returned by the last plugin is treated as the cache key for cache\n * reads and/or writes. If no `cacheKeyWillBeUsed` plugin callbacks have\n * been registered, the passed request is returned unmodified\n *\n * @param {Request} request\n * @param {string} mode\n * @return {Promise}\n */\n async getCacheKey(request, mode) {\n const key = `${request.url} | ${mode}`;\n if (!this._cacheKeys[key]) {\n let effectiveRequest = request;\n for (const callback of this.iterateCallbacks('cacheKeyWillBeUsed')) {\n effectiveRequest = toRequest(await callback({\n mode,\n request: effectiveRequest,\n event: this.event,\n // params has a type any can't change right now.\n params: this.params, // eslint-disable-line\n }));\n }\n this._cacheKeys[key] = effectiveRequest;\n }\n return this._cacheKeys[key];\n }\n /**\n * Returns true if the strategy has at least one plugin with the given\n * callback.\n *\n * @param {string} name The name of the callback to check for.\n * @return {boolean}\n */\n hasCallback(name) {\n for (const plugin of this._strategy.plugins) {\n if (name in plugin) {\n return true;\n }\n }\n return false;\n }\n /**\n * Runs all plugin callbacks matching the given name, in order, passing the\n * given param object (merged ith the current plugin state) as the only\n * argument.\n *\n * Note: since this method runs all plugins, it's not suitable for cases\n * where the return value of a callback needs to be applied prior to calling\n * the next callback. See\n * {@link workbox-strategies.StrategyHandler#iterateCallbacks}\n * below for how to handle that case.\n *\n * @param {string} name The name of the callback to run within each plugin.\n * @param {Object} param The object to pass as the first (and only) param\n * when executing each callback. This object will be merged with the\n * current plugin state prior to callback execution.\n */\n async runCallbacks(name, param) {\n for (const callback of this.iterateCallbacks(name)) {\n // TODO(philipwalton): not sure why `any` is needed. It seems like\n // this should work with `as WorkboxPluginCallbackParam[C]`.\n await callback(param);\n }\n }\n /**\n * Accepts a callback and returns an iterable of matching plugin callbacks,\n * where each callback is wrapped with the current handler state (i.e. when\n * you call each callback, whatever object parameter you pass it will\n * be merged with the plugin's current state).\n *\n * @param {string} name The name fo the callback to run\n * @return {Array}\n */\n *iterateCallbacks(name) {\n for (const plugin of this._strategy.plugins) {\n if (typeof plugin[name] === 'function') {\n const state = this._pluginStateMap.get(plugin);\n const statefulCallback = (param) => {\n const statefulParam = Object.assign(Object.assign({}, param), { state });\n // TODO(philipwalton): not sure why `any` is needed. It seems like\n // this should work with `as WorkboxPluginCallbackParam[C]`.\n return plugin[name](statefulParam);\n };\n yield statefulCallback;\n }\n }\n }\n /**\n * Adds a promise to the\n * [extend lifetime promises]{@link https://w3c.github.io/ServiceWorker/#extendableevent-extend-lifetime-promises}\n * of the event event associated with the request being handled (usually a\n * `FetchEvent`).\n *\n * Note: you can await\n * {@link workbox-strategies.StrategyHandler~doneWaiting}\n * to know when all added promises have settled.\n *\n * @param {Promise} promise A promise to add to the extend lifetime promises\n * of the event that triggered the request.\n */\n waitUntil(promise) {\n this._extendLifetimePromises.push(promise);\n return promise;\n }\n /**\n * Returns a promise that resolves once all promises passed to\n * {@link workbox-strategies.StrategyHandler~waitUntil}\n * have settled.\n *\n * Note: any work done after `doneWaiting()` settles should be manually\n * passed to an event's `waitUntil()` method (not this handler's\n * `waitUntil()` method), otherwise the service worker thread my be killed\n * prior to your work completing.\n */\n async doneWaiting() {\n let promise;\n while ((promise = this._extendLifetimePromises.shift())) {\n await promise;\n }\n }\n /**\n * Stops running the strategy and immediately resolves any pending\n * `waitUntil()` promises.\n */\n destroy() {\n this._handlerDeferred.resolve(null);\n }\n /**\n * This method will call cacheWillUpdate on the available plugins (or use\n * status === 200) to determine if the Response is safe and valid to cache.\n *\n * @param {Request} options.request\n * @param {Response} options.response\n * @return {Promise}\n *\n * @private\n */\n async _ensureResponseSafeToCache(response) {\n let responseToCache = response;\n let pluginsUsed = false;\n for (const callback of this.iterateCallbacks('cacheWillUpdate')) {\n responseToCache =\n (await callback({\n request: this.request,\n response: responseToCache,\n event: this.event,\n })) || undefined;\n pluginsUsed = true;\n if (!responseToCache) {\n break;\n }\n }\n if (!pluginsUsed) {\n if (responseToCache && responseToCache.status !== 200) {\n responseToCache = undefined;\n }\n if (process.env.NODE_ENV !== 'production') {\n if (responseToCache) {\n if (responseToCache.status !== 200) {\n if (responseToCache.status === 0) {\n logger.warn(`The response for '${this.request.url}' ` +\n `is an opaque response. The caching strategy that you're ` +\n `using will not cache opaque responses by default.`);\n }\n else {\n logger.debug(`The response for '${this.request.url}' ` +\n `returned a status code of '${response.status}' and won't ` +\n `be cached as a result.`);\n }\n }\n }\n }\n }\n return responseToCache;\n }\n}\nexport { StrategyHandler };\n","/*\n Copyright 2020 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { cacheNames } from 'workbox-core/_private/cacheNames.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { StrategyHandler } from './StrategyHandler.js';\nimport './_version.js';\n/**\n * An abstract base class that all other strategy classes must extend from:\n *\n * @memberof workbox-strategies\n */\nclass Strategy {\n /**\n * Creates a new instance of the strategy and sets all documented option\n * properties as public instance properties.\n *\n * Note: if a custom strategy class extends the base Strategy class and does\n * not need more than these properties, it does not need to define its own\n * constructor.\n *\n * @param {Object} [options]\n * @param {string} [options.cacheName] Cache name to store and retrieve\n * requests. Defaults to the cache names provided by\n * {@link workbox-core.cacheNames}.\n * @param {Array} [options.plugins] [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}\n * to use in conjunction with this caching strategy.\n * @param {Object} [options.fetchOptions] Values passed along to the\n * [`init`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters)\n * of [non-navigation](https://github.com/GoogleChrome/workbox/issues/1796)\n * `fetch()` requests made by this strategy.\n * @param {Object} [options.matchOptions] The\n * [`CacheQueryOptions`]{@link https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions}\n * for any `cache.match()` or `cache.put()` calls made by this strategy.\n */\n constructor(options = {}) {\n /**\n * Cache name to store and retrieve\n * requests. Defaults to the cache names provided by\n * {@link workbox-core.cacheNames}.\n *\n * @type {string}\n */\n this.cacheName = cacheNames.getRuntimeName(options.cacheName);\n /**\n * The list\n * [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}\n * used by this strategy.\n *\n * @type {Array}\n */\n this.plugins = options.plugins || [];\n /**\n * Values passed along to the\n * [`init`]{@link https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters}\n * of all fetch() requests made by this strategy.\n *\n * @type {Object}\n */\n this.fetchOptions = options.fetchOptions;\n /**\n * The\n * [`CacheQueryOptions`]{@link https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions}\n * for any `cache.match()` or `cache.put()` calls made by this strategy.\n *\n * @type {Object}\n */\n this.matchOptions = options.matchOptions;\n }\n /**\n * Perform a request strategy and returns a `Promise` that will resolve with\n * a `Response`, invoking all relevant plugin callbacks.\n *\n * When a strategy instance is registered with a Workbox\n * {@link workbox-routing.Route}, this method is automatically\n * called when the route matches.\n *\n * Alternatively, this method can be used in a standalone `FetchEvent`\n * listener by passing it to `event.respondWith()`.\n *\n * @param {FetchEvent|Object} options A `FetchEvent` or an object with the\n * properties listed below.\n * @param {Request|string} options.request A request to run this strategy for.\n * @param {ExtendableEvent} options.event The event associated with the\n * request.\n * @param {URL} [options.url]\n * @param {*} [options.params]\n */\n handle(options) {\n const [responseDone] = this.handleAll(options);\n return responseDone;\n }\n /**\n * Similar to {@link workbox-strategies.Strategy~handle}, but\n * instead of just returning a `Promise` that resolves to a `Response` it\n * it will return an tuple of `[response, done]` promises, where the former\n * (`response`) is equivalent to what `handle()` returns, and the latter is a\n * Promise that will resolve once any promises that were added to\n * `event.waitUntil()` as part of performing the strategy have completed.\n *\n * You can await the `done` promise to ensure any extra work performed by\n * the strategy (usually caching responses) completes successfully.\n *\n * @param {FetchEvent|Object} options A `FetchEvent` or an object with the\n * properties listed below.\n * @param {Request|string} options.request A request to run this strategy for.\n * @param {ExtendableEvent} options.event The event associated with the\n * request.\n * @param {URL} [options.url]\n * @param {*} [options.params]\n * @return {Array} A tuple of [response, done]\n * promises that can be used to determine when the response resolves as\n * well as when the handler has completed all its work.\n */\n handleAll(options) {\n // Allow for flexible options to be passed.\n if (options instanceof FetchEvent) {\n options = {\n event: options,\n request: options.request,\n };\n }\n const event = options.event;\n const request = typeof options.request === 'string'\n ? new Request(options.request)\n : options.request;\n const params = 'params' in options ? options.params : undefined;\n const handler = new StrategyHandler(this, { event, request, params });\n const responseDone = this._getResponse(handler, request, event);\n const handlerDone = this._awaitComplete(responseDone, handler, request, event);\n // Return an array of promises, suitable for use with Promise.all().\n return [responseDone, handlerDone];\n }\n async _getResponse(handler, request, event) {\n await handler.runCallbacks('handlerWillStart', { event, request });\n let response = undefined;\n try {\n response = await this._handle(request, handler);\n // The \"official\" Strategy subclasses all throw this error automatically,\n // but in case a third-party Strategy doesn't, ensure that we have a\n // consistent failure when there's no response or an error response.\n if (!response || response.type === 'error') {\n throw new WorkboxError('no-response', { url: request.url });\n }\n }\n catch (error) {\n if (error instanceof Error) {\n for (const callback of handler.iterateCallbacks('handlerDidError')) {\n response = await callback({ error, event, request });\n if (response) {\n break;\n }\n }\n }\n if (!response) {\n throw error;\n }\n else if (process.env.NODE_ENV !== 'production') {\n logger.log(`While responding to '${getFriendlyURL(request.url)}', ` +\n `an ${error instanceof Error ? error.toString() : ''} error occurred. Using a fallback response provided by ` +\n `a handlerDidError plugin.`);\n }\n }\n for (const callback of handler.iterateCallbacks('handlerWillRespond')) {\n response = await callback({ event, request, response });\n }\n return response;\n }\n async _awaitComplete(responseDone, handler, request, event) {\n let response;\n let error;\n try {\n response = await responseDone;\n }\n catch (error) {\n // Ignore errors, as response errors should be caught via the `response`\n // promise above. The `done` promise will only throw for errors in\n // promises passed to `handler.waitUntil()`.\n }\n try {\n await handler.runCallbacks('handlerDidRespond', {\n event,\n request,\n response,\n });\n await handler.doneWaiting();\n }\n catch (waitUntilError) {\n if (waitUntilError instanceof Error) {\n error = waitUntilError;\n }\n }\n await handler.runCallbacks('handlerDidComplete', {\n event,\n request,\n response,\n error: error,\n });\n handler.destroy();\n if (error) {\n throw error;\n }\n }\n}\nexport { Strategy };\n/**\n * Classes extending the `Strategy` based class should implement this method,\n * and leverage the {@link workbox-strategies.StrategyHandler}\n * arg to perform all fetching and cache logic, which will ensure all relevant\n * cache, cache options, fetch options and plugins are used (per the current\n * strategy instance).\n *\n * @name _handle\n * @instance\n * @abstract\n * @function\n * @param {Request} request\n * @param {workbox-strategies.StrategyHandler} handler\n * @return {Promise}\n *\n * @memberof workbox-strategies.Strategy\n */\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { Strategy } from './Strategy.js';\nimport { messages } from './utils/messages.js';\nimport './_version.js';\n/**\n * An implementation of a [cache-first](https://developer.chrome.com/docs/workbox/caching-strategies-overview/#cache-first-falling-back-to-network)\n * request strategy.\n *\n * A cache first strategy is useful for assets that have been revisioned,\n * such as URLs like `/styles/example.a8f5f1.css`, since they\n * can be cached for long periods of time.\n *\n * If the network request fails, and there is no cache match, this will throw\n * a `WorkboxError` exception.\n *\n * @extends workbox-strategies.Strategy\n * @memberof workbox-strategies\n */\nclass CacheFirst extends Strategy {\n /**\n * @private\n * @param {Request|string} request A request to run this strategy for.\n * @param {workbox-strategies.StrategyHandler} handler The event that\n * triggered the request.\n * @return {Promise}\n */\n async _handle(request, handler) {\n const logs = [];\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(request, Request, {\n moduleName: 'workbox-strategies',\n className: this.constructor.name,\n funcName: 'makeRequest',\n paramName: 'request',\n });\n }\n let response = await handler.cacheMatch(request);\n let error = undefined;\n if (!response) {\n if (process.env.NODE_ENV !== 'production') {\n logs.push(`No response found in the '${this.cacheName}' cache. ` +\n `Will respond with a network request.`);\n }\n try {\n response = await handler.fetchAndCachePut(request);\n }\n catch (err) {\n if (err instanceof Error) {\n error = err;\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n if (response) {\n logs.push(`Got response from network.`);\n }\n else {\n logs.push(`Unable to get a response from the network.`);\n }\n }\n }\n else {\n if (process.env.NODE_ENV !== 'production') {\n logs.push(`Found a cached response in the '${this.cacheName}' cache.`);\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n logger.groupCollapsed(messages.strategyStart(this.constructor.name, request));\n for (const log of logs) {\n logger.log(log);\n }\n messages.printFinalResponse(response);\n logger.groupEnd();\n }\n if (!response) {\n throw new WorkboxError('no-response', { url: request.url, error });\n }\n return response;\n }\n}\nexport { CacheFirst };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nexport const cacheOkAndOpaquePlugin = {\n /**\n * Returns a valid response (to allow caching) if the status is 200 (OK) or\n * 0 (opaque).\n *\n * @param {Object} options\n * @param {Response} options.response\n * @return {Response|null}\n *\n * @private\n */\n cacheWillUpdate: async ({ response }) => {\n if (response.status === 200 || response.status === 0) {\n return response;\n }\n return null;\n },\n};\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { cacheOkAndOpaquePlugin } from './plugins/cacheOkAndOpaquePlugin.js';\nimport { Strategy } from './Strategy.js';\nimport { messages } from './utils/messages.js';\nimport './_version.js';\n/**\n * An implementation of a\n * [stale-while-revalidate](https://developer.chrome.com/docs/workbox/caching-strategies-overview/#stale-while-revalidate)\n * request strategy.\n *\n * Resources are requested from both the cache and the network in parallel.\n * The strategy will respond with the cached version if available, otherwise\n * wait for the network response. The cache is updated with the network response\n * with each successful request.\n *\n * By default, this strategy will cache responses with a 200 status code as\n * well as [opaque responses](https://developer.chrome.com/docs/workbox/caching-resources-during-runtime/#opaque-responses).\n * Opaque responses are cross-origin requests where the response doesn't\n * support [CORS](https://enable-cors.org/).\n *\n * If the network request fails, and there is no cache match, this will throw\n * a `WorkboxError` exception.\n *\n * @extends workbox-strategies.Strategy\n * @memberof workbox-strategies\n */\nclass StaleWhileRevalidate extends Strategy {\n /**\n * @param {Object} [options]\n * @param {string} [options.cacheName] Cache name to store and retrieve\n * requests. Defaults to cache names provided by\n * {@link workbox-core.cacheNames}.\n * @param {Array} [options.plugins] [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}\n * to use in conjunction with this caching strategy.\n * @param {Object} [options.fetchOptions] Values passed along to the\n * [`init`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters)\n * of [non-navigation](https://github.com/GoogleChrome/workbox/issues/1796)\n * `fetch()` requests made by this strategy.\n * @param {Object} [options.matchOptions] [`CacheQueryOptions`](https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions)\n */\n constructor(options = {}) {\n super(options);\n // If this instance contains no plugins with a 'cacheWillUpdate' callback,\n // prepend the `cacheOkAndOpaquePlugin` plugin to the plugins list.\n if (!this.plugins.some((p) => 'cacheWillUpdate' in p)) {\n this.plugins.unshift(cacheOkAndOpaquePlugin);\n }\n }\n /**\n * @private\n * @param {Request|string} request A request to run this strategy for.\n * @param {workbox-strategies.StrategyHandler} handler The event that\n * triggered the request.\n * @return {Promise}\n */\n async _handle(request, handler) {\n const logs = [];\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(request, Request, {\n moduleName: 'workbox-strategies',\n className: this.constructor.name,\n funcName: 'handle',\n paramName: 'request',\n });\n }\n const fetchAndCachePromise = handler.fetchAndCachePut(request).catch(() => {\n // Swallow this error because a 'no-response' error will be thrown in\n // main handler return flow. This will be in the `waitUntil()` flow.\n });\n void handler.waitUntil(fetchAndCachePromise);\n let response = await handler.cacheMatch(request);\n let error;\n if (response) {\n if (process.env.NODE_ENV !== 'production') {\n logs.push(`Found a cached response in the '${this.cacheName}'` +\n ` cache. Will update with the network response in the background.`);\n }\n }\n else {\n if (process.env.NODE_ENV !== 'production') {\n logs.push(`No response found in the '${this.cacheName}' cache. ` +\n `Will wait for the network response.`);\n }\n try {\n // NOTE(philipwalton): Really annoying that we have to type cast here.\n // https://github.com/microsoft/TypeScript/issues/20006\n response = (await fetchAndCachePromise);\n }\n catch (err) {\n if (err instanceof Error) {\n error = err;\n }\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n logger.groupCollapsed(messages.strategyStart(this.constructor.name, request));\n for (const log of logs) {\n logger.log(log);\n }\n messages.printFinalResponse(response);\n logger.groupEnd();\n }\n if (!response) {\n throw new WorkboxError('no-response', { url: request.url, error });\n }\n return response;\n }\n}\nexport { StaleWhileRevalidate };\n","export function escapeRegExp(value: string) {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'); // $& means the whole matched string\n}\n","const instanceOfAny = (object, constructors) => constructors.some((c) => object instanceof c);\n\nlet idbProxyableTypes;\nlet cursorAdvanceMethods;\n// This is a function to prevent it throwing up in node environments.\nfunction getIdbProxyableTypes() {\n return (idbProxyableTypes ||\n (idbProxyableTypes = [\n IDBDatabase,\n IDBObjectStore,\n IDBIndex,\n IDBCursor,\n IDBTransaction,\n ]));\n}\n// This is a function to prevent it throwing up in node environments.\nfunction getCursorAdvanceMethods() {\n return (cursorAdvanceMethods ||\n (cursorAdvanceMethods = [\n IDBCursor.prototype.advance,\n IDBCursor.prototype.continue,\n IDBCursor.prototype.continuePrimaryKey,\n ]));\n}\nconst cursorRequestMap = new WeakMap();\nconst transactionDoneMap = new WeakMap();\nconst transactionStoreNamesMap = new WeakMap();\nconst transformCache = new WeakMap();\nconst reverseTransformCache = new WeakMap();\nfunction promisifyRequest(request) {\n const promise = new Promise((resolve, reject) => {\n const unlisten = () => {\n request.removeEventListener('success', success);\n request.removeEventListener('error', error);\n };\n const success = () => {\n resolve(wrap(request.result));\n unlisten();\n };\n const error = () => {\n reject(request.error);\n unlisten();\n };\n request.addEventListener('success', success);\n request.addEventListener('error', error);\n });\n promise\n .then((value) => {\n // Since cursoring reuses the IDBRequest (*sigh*), we cache it for later retrieval\n // (see wrapFunction).\n if (value instanceof IDBCursor) {\n cursorRequestMap.set(value, request);\n }\n // Catching to avoid \"Uncaught Promise exceptions\"\n })\n .catch(() => { });\n // This mapping exists in reverseTransformCache but doesn't doesn't exist in transformCache. This\n // is because we create many promises from a single IDBRequest.\n reverseTransformCache.set(promise, request);\n return promise;\n}\nfunction cacheDonePromiseForTransaction(tx) {\n // Early bail if we've already created a done promise for this transaction.\n if (transactionDoneMap.has(tx))\n return;\n const done = new Promise((resolve, reject) => {\n const unlisten = () => {\n tx.removeEventListener('complete', complete);\n tx.removeEventListener('error', error);\n tx.removeEventListener('abort', error);\n };\n const complete = () => {\n resolve();\n unlisten();\n };\n const error = () => {\n reject(tx.error || new DOMException('AbortError', 'AbortError'));\n unlisten();\n };\n tx.addEventListener('complete', complete);\n tx.addEventListener('error', error);\n tx.addEventListener('abort', error);\n });\n // Cache it for later retrieval.\n transactionDoneMap.set(tx, done);\n}\nlet idbProxyTraps = {\n get(target, prop, receiver) {\n if (target instanceof IDBTransaction) {\n // Special handling for transaction.done.\n if (prop === 'done')\n return transactionDoneMap.get(target);\n // Polyfill for objectStoreNames because of Edge.\n if (prop === 'objectStoreNames') {\n return target.objectStoreNames || transactionStoreNamesMap.get(target);\n }\n // Make tx.store return the only store in the transaction, or undefined if there are many.\n if (prop === 'store') {\n return receiver.objectStoreNames[1]\n ? undefined\n : receiver.objectStore(receiver.objectStoreNames[0]);\n }\n }\n // Else transform whatever we get back.\n return wrap(target[prop]);\n },\n set(target, prop, value) {\n target[prop] = value;\n return true;\n },\n has(target, prop) {\n if (target instanceof IDBTransaction &&\n (prop === 'done' || prop === 'store')) {\n return true;\n }\n return prop in target;\n },\n};\nfunction replaceTraps(callback) {\n idbProxyTraps = callback(idbProxyTraps);\n}\nfunction wrapFunction(func) {\n // Due to expected object equality (which is enforced by the caching in `wrap`), we\n // only create one new func per func.\n // Edge doesn't support objectStoreNames (booo), so we polyfill it here.\n if (func === IDBDatabase.prototype.transaction &&\n !('objectStoreNames' in IDBTransaction.prototype)) {\n return function (storeNames, ...args) {\n const tx = func.call(unwrap(this), storeNames, ...args);\n transactionStoreNamesMap.set(tx, storeNames.sort ? storeNames.sort() : [storeNames]);\n return wrap(tx);\n };\n }\n // Cursor methods are special, as the behaviour is a little more different to standard IDB. In\n // IDB, you advance the cursor and wait for a new 'success' on the IDBRequest that gave you the\n // cursor. It's kinda like a promise that can resolve with many values. That doesn't make sense\n // with real promises, so each advance methods returns a new promise for the cursor object, or\n // undefined if the end of the cursor has been reached.\n if (getCursorAdvanceMethods().includes(func)) {\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n func.apply(unwrap(this), args);\n return wrap(cursorRequestMap.get(this));\n };\n }\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n return wrap(func.apply(unwrap(this), args));\n };\n}\nfunction transformCachableValue(value) {\n if (typeof value === 'function')\n return wrapFunction(value);\n // This doesn't return, it just creates a 'done' promise for the transaction,\n // which is later returned for transaction.done (see idbObjectHandler).\n if (value instanceof IDBTransaction)\n cacheDonePromiseForTransaction(value);\n if (instanceOfAny(value, getIdbProxyableTypes()))\n return new Proxy(value, idbProxyTraps);\n // Return the same value back if we're not going to transform it.\n return value;\n}\nfunction wrap(value) {\n // We sometimes generate multiple promises from a single IDBRequest (eg when cursoring), because\n // IDB is weird and a single IDBRequest can yield many responses, so these can't be cached.\n if (value instanceof IDBRequest)\n return promisifyRequest(value);\n // If we've already transformed this value before, reuse the transformed value.\n // This is faster, but it also provides object equality.\n if (transformCache.has(value))\n return transformCache.get(value);\n const newValue = transformCachableValue(value);\n // Not all types are transformed.\n // These may be primitive types, so they can't be WeakMap keys.\n if (newValue !== value) {\n transformCache.set(value, newValue);\n reverseTransformCache.set(newValue, value);\n }\n return newValue;\n}\nconst unwrap = (value) => reverseTransformCache.get(value);\n\nexport { reverseTransformCache as a, instanceOfAny as i, replaceTraps as r, unwrap as u, wrap as w };\n","import { w as wrap, r as replaceTraps } from './wrap-idb-value.js';\nexport { u as unwrap, w as wrap } from './wrap-idb-value.js';\n\n/**\n * Open a database.\n *\n * @param name Name of the database.\n * @param version Schema version.\n * @param callbacks Additional callbacks.\n */\nfunction openDB(name, version, { blocked, upgrade, blocking, terminated } = {}) {\n const request = indexedDB.open(name, version);\n const openPromise = wrap(request);\n if (upgrade) {\n request.addEventListener('upgradeneeded', (event) => {\n upgrade(wrap(request.result), event.oldVersion, event.newVersion, wrap(request.transaction), event);\n });\n }\n if (blocked) {\n request.addEventListener('blocked', (event) => blocked(\n // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405\n event.oldVersion, event.newVersion, event));\n }\n openPromise\n .then((db) => {\n if (terminated)\n db.addEventListener('close', () => terminated());\n if (blocking) {\n db.addEventListener('versionchange', (event) => blocking(event.oldVersion, event.newVersion, event));\n }\n })\n .catch(() => { });\n return openPromise;\n}\n/**\n * Delete a database.\n *\n * @param name Name of the database.\n */\nfunction deleteDB(name, { blocked } = {}) {\n const request = indexedDB.deleteDatabase(name);\n if (blocked) {\n request.addEventListener('blocked', (event) => blocked(\n // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405\n event.oldVersion, event));\n }\n return wrap(request).then(() => undefined);\n}\n\nconst readMethods = ['get', 'getKey', 'getAll', 'getAllKeys', 'count'];\nconst writeMethods = ['put', 'add', 'delete', 'clear'];\nconst cachedMethods = new Map();\nfunction getMethod(target, prop) {\n if (!(target instanceof IDBDatabase &&\n !(prop in target) &&\n typeof prop === 'string')) {\n return;\n }\n if (cachedMethods.get(prop))\n return cachedMethods.get(prop);\n const targetFuncName = prop.replace(/FromIndex$/, '');\n const useIndex = prop !== targetFuncName;\n const isWrite = writeMethods.includes(targetFuncName);\n if (\n // Bail if the target doesn't exist on the target. Eg, getAll isn't in Edge.\n !(targetFuncName in (useIndex ? IDBIndex : IDBObjectStore).prototype) ||\n !(isWrite || readMethods.includes(targetFuncName))) {\n return;\n }\n const method = async function (storeName, ...args) {\n // isWrite ? 'readwrite' : undefined gzipps better, but fails in Edge :(\n const tx = this.transaction(storeName, isWrite ? 'readwrite' : 'readonly');\n let target = tx.store;\n if (useIndex)\n target = target.index(args.shift());\n // Must reject if op rejects.\n // If it's a write operation, must reject if tx.done rejects.\n // Must reject with op rejection first.\n // Must resolve with op value.\n // Must handle both promises (no unhandled rejections)\n return (await Promise.all([\n target[targetFuncName](...args),\n isWrite && tx.done,\n ]))[0];\n };\n cachedMethods.set(prop, method);\n return method;\n}\nreplaceTraps((oldTraps) => ({\n ...oldTraps,\n get: (target, prop, receiver) => getMethod(target, prop) || oldTraps.get(target, prop, receiver),\n has: (target, prop) => !!getMethod(target, prop) || oldTraps.has(target, prop),\n}));\n\nexport { deleteDB, openDB };\n","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:expiration:7.2.0'] && _();\n}\ncatch (e) { }\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { openDB, deleteDB } from 'idb';\nimport '../_version.js';\nconst DB_NAME = 'workbox-expiration';\nconst CACHE_OBJECT_STORE = 'cache-entries';\nconst normalizeURL = (unNormalizedUrl) => {\n const url = new URL(unNormalizedUrl, location.href);\n url.hash = '';\n return url.href;\n};\n/**\n * Returns the timestamp model.\n *\n * @private\n */\nclass CacheTimestampsModel {\n /**\n *\n * @param {string} cacheName\n *\n * @private\n */\n constructor(cacheName) {\n this._db = null;\n this._cacheName = cacheName;\n }\n /**\n * Performs an upgrade of indexedDB.\n *\n * @param {IDBPDatabase} db\n *\n * @private\n */\n _upgradeDb(db) {\n // TODO(philipwalton): EdgeHTML doesn't support arrays as a keyPath, so we\n // have to use the `id` keyPath here and create our own values (a\n // concatenation of `url + cacheName`) instead of simply using\n // `keyPath: ['url', 'cacheName']`, which is supported in other browsers.\n const objStore = db.createObjectStore(CACHE_OBJECT_STORE, { keyPath: 'id' });\n // TODO(philipwalton): once we don't have to support EdgeHTML, we can\n // create a single index with the keyPath `['cacheName', 'timestamp']`\n // instead of doing both these indexes.\n objStore.createIndex('cacheName', 'cacheName', { unique: false });\n objStore.createIndex('timestamp', 'timestamp', { unique: false });\n }\n /**\n * Performs an upgrade of indexedDB and deletes deprecated DBs.\n *\n * @param {IDBPDatabase} db\n *\n * @private\n */\n _upgradeDbAndDeleteOldDbs(db) {\n this._upgradeDb(db);\n if (this._cacheName) {\n void deleteDB(this._cacheName);\n }\n }\n /**\n * @param {string} url\n * @param {number} timestamp\n *\n * @private\n */\n async setTimestamp(url, timestamp) {\n url = normalizeURL(url);\n const entry = {\n url,\n timestamp,\n cacheName: this._cacheName,\n // Creating an ID from the URL and cache name won't be necessary once\n // Edge switches to Chromium and all browsers we support work with\n // array keyPaths.\n id: this._getId(url),\n };\n const db = await this.getDb();\n const tx = db.transaction(CACHE_OBJECT_STORE, 'readwrite', {\n durability: 'relaxed',\n });\n await tx.store.put(entry);\n await tx.done;\n }\n /**\n * Returns the timestamp stored for a given URL.\n *\n * @param {string} url\n * @return {number | undefined}\n *\n * @private\n */\n async getTimestamp(url) {\n const db = await this.getDb();\n const entry = await db.get(CACHE_OBJECT_STORE, this._getId(url));\n return entry === null || entry === void 0 ? void 0 : entry.timestamp;\n }\n /**\n * Iterates through all the entries in the object store (from newest to\n * oldest) and removes entries once either `maxCount` is reached or the\n * entry's timestamp is less than `minTimestamp`.\n *\n * @param {number} minTimestamp\n * @param {number} maxCount\n * @return {Array}\n *\n * @private\n */\n async expireEntries(minTimestamp, maxCount) {\n const db = await this.getDb();\n let cursor = await db\n .transaction(CACHE_OBJECT_STORE)\n .store.index('timestamp')\n .openCursor(null, 'prev');\n const entriesToDelete = [];\n let entriesNotDeletedCount = 0;\n while (cursor) {\n const result = cursor.value;\n // TODO(philipwalton): once we can use a multi-key index, we\n // won't have to check `cacheName` here.\n if (result.cacheName === this._cacheName) {\n // Delete an entry if it's older than the max age or\n // if we already have the max number allowed.\n if ((minTimestamp && result.timestamp < minTimestamp) ||\n (maxCount && entriesNotDeletedCount >= maxCount)) {\n // TODO(philipwalton): we should be able to delete the\n // entry right here, but doing so causes an iteration\n // bug in Safari stable (fixed in TP). Instead we can\n // store the keys of the entries to delete, and then\n // delete the separate transactions.\n // https://github.com/GoogleChrome/workbox/issues/1978\n // cursor.delete();\n // We only need to return the URL, not the whole entry.\n entriesToDelete.push(cursor.value);\n }\n else {\n entriesNotDeletedCount++;\n }\n }\n cursor = await cursor.continue();\n }\n // TODO(philipwalton): once the Safari bug in the following issue is fixed,\n // we should be able to remove this loop and do the entry deletion in the\n // cursor loop above:\n // https://github.com/GoogleChrome/workbox/issues/1978\n const urlsDeleted = [];\n for (const entry of entriesToDelete) {\n await db.delete(CACHE_OBJECT_STORE, entry.id);\n urlsDeleted.push(entry.url);\n }\n return urlsDeleted;\n }\n /**\n * Takes a URL and returns an ID that will be unique in the object store.\n *\n * @param {string} url\n * @return {string}\n *\n * @private\n */\n _getId(url) {\n // Creating an ID from the URL and cache name won't be necessary once\n // Edge switches to Chromium and all browsers we support work with\n // array keyPaths.\n return this._cacheName + '|' + normalizeURL(url);\n }\n /**\n * Returns an open connection to the database.\n *\n * @private\n */\n async getDb() {\n if (!this._db) {\n this._db = await openDB(DB_NAME, 1, {\n upgrade: this._upgradeDbAndDeleteOldDbs.bind(this),\n });\n }\n return this._db;\n }\n}\nexport { CacheTimestampsModel };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { dontWaitFor } from 'workbox-core/_private/dontWaitFor.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { CacheTimestampsModel } from './models/CacheTimestampsModel.js';\nimport './_version.js';\n/**\n * The `CacheExpiration` class allows you define an expiration and / or\n * limit on the number of responses stored in a\n * [`Cache`](https://developer.mozilla.org/en-US/docs/Web/API/Cache).\n *\n * @memberof workbox-expiration\n */\nclass CacheExpiration {\n /**\n * To construct a new CacheExpiration instance you must provide at least\n * one of the `config` properties.\n *\n * @param {string} cacheName Name of the cache to apply restrictions to.\n * @param {Object} config\n * @param {number} [config.maxEntries] The maximum number of entries to cache.\n * Entries used the least will be removed as the maximum is reached.\n * @param {number} [config.maxAgeSeconds] The maximum age of an entry before\n * it's treated as stale and removed.\n * @param {Object} [config.matchOptions] The [`CacheQueryOptions`](https://developer.mozilla.org/en-US/docs/Web/API/Cache/delete#Parameters)\n * that will be used when calling `delete()` on the cache.\n */\n constructor(cacheName, config = {}) {\n this._isRunning = false;\n this._rerunRequested = false;\n if (process.env.NODE_ENV !== 'production') {\n assert.isType(cacheName, 'string', {\n moduleName: 'workbox-expiration',\n className: 'CacheExpiration',\n funcName: 'constructor',\n paramName: 'cacheName',\n });\n if (!(config.maxEntries || config.maxAgeSeconds)) {\n throw new WorkboxError('max-entries-or-age-required', {\n moduleName: 'workbox-expiration',\n className: 'CacheExpiration',\n funcName: 'constructor',\n });\n }\n if (config.maxEntries) {\n assert.isType(config.maxEntries, 'number', {\n moduleName: 'workbox-expiration',\n className: 'CacheExpiration',\n funcName: 'constructor',\n paramName: 'config.maxEntries',\n });\n }\n if (config.maxAgeSeconds) {\n assert.isType(config.maxAgeSeconds, 'number', {\n moduleName: 'workbox-expiration',\n className: 'CacheExpiration',\n funcName: 'constructor',\n paramName: 'config.maxAgeSeconds',\n });\n }\n }\n this._maxEntries = config.maxEntries;\n this._maxAgeSeconds = config.maxAgeSeconds;\n this._matchOptions = config.matchOptions;\n this._cacheName = cacheName;\n this._timestampModel = new CacheTimestampsModel(cacheName);\n }\n /**\n * Expires entries for the given cache and given criteria.\n */\n async expireEntries() {\n if (this._isRunning) {\n this._rerunRequested = true;\n return;\n }\n this._isRunning = true;\n const minTimestamp = this._maxAgeSeconds\n ? Date.now() - this._maxAgeSeconds * 1000\n : 0;\n const urlsExpired = await this._timestampModel.expireEntries(minTimestamp, this._maxEntries);\n // Delete URLs from the cache\n const cache = await self.caches.open(this._cacheName);\n for (const url of urlsExpired) {\n await cache.delete(url, this._matchOptions);\n }\n if (process.env.NODE_ENV !== 'production') {\n if (urlsExpired.length > 0) {\n logger.groupCollapsed(`Expired ${urlsExpired.length} ` +\n `${urlsExpired.length === 1 ? 'entry' : 'entries'} and removed ` +\n `${urlsExpired.length === 1 ? 'it' : 'them'} from the ` +\n `'${this._cacheName}' cache.`);\n logger.log(`Expired the following ${urlsExpired.length === 1 ? 'URL' : 'URLs'}:`);\n urlsExpired.forEach((url) => logger.log(` ${url}`));\n logger.groupEnd();\n }\n else {\n logger.debug(`Cache expiration ran and found no entries to remove.`);\n }\n }\n this._isRunning = false;\n if (this._rerunRequested) {\n this._rerunRequested = false;\n dontWaitFor(this.expireEntries());\n }\n }\n /**\n * Update the timestamp for the given URL. This ensures the when\n * removing entries based on maximum entries, most recently used\n * is accurate or when expiring, the timestamp is up-to-date.\n *\n * @param {string} url\n */\n async updateTimestamp(url) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isType(url, 'string', {\n moduleName: 'workbox-expiration',\n className: 'CacheExpiration',\n funcName: 'updateTimestamp',\n paramName: 'url',\n });\n }\n await this._timestampModel.setTimestamp(url, Date.now());\n }\n /**\n * Can be used to check if a URL has expired or not before it's used.\n *\n * This requires a look up from IndexedDB, so can be slow.\n *\n * Note: This method will not remove the cached entry, call\n * `expireEntries()` to remove indexedDB and Cache entries.\n *\n * @param {string} url\n * @return {boolean}\n */\n async isURLExpired(url) {\n if (!this._maxAgeSeconds) {\n if (process.env.NODE_ENV !== 'production') {\n throw new WorkboxError(`expired-test-without-max-age`, {\n methodName: 'isURLExpired',\n paramName: 'maxAgeSeconds',\n });\n }\n return false;\n }\n else {\n const timestamp = await this._timestampModel.getTimestamp(url);\n const expireOlderThan = Date.now() - this._maxAgeSeconds * 1000;\n return timestamp !== undefined ? timestamp < expireOlderThan : true;\n }\n }\n /**\n * Removes the IndexedDB object store used to keep track of cache expiration\n * metadata.\n */\n async delete() {\n // Make sure we don't attempt another rerun if we're called in the middle of\n // a cache expiration.\n this._rerunRequested = false;\n await this._timestampModel.expireEntries(Infinity); // Expires all.\n }\n}\nexport { CacheExpiration };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { cacheNames } from 'workbox-core/_private/cacheNames.js';\nimport { dontWaitFor } from 'workbox-core/_private/dontWaitFor.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { registerQuotaErrorCallback } from 'workbox-core/registerQuotaErrorCallback.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { CacheExpiration } from './CacheExpiration.js';\nimport './_version.js';\n/**\n * This plugin can be used in a `workbox-strategy` to regularly enforce a\n * limit on the age and / or the number of cached requests.\n *\n * It can only be used with `workbox-strategy` instances that have a\n * [custom `cacheName` property set](/web/tools/workbox/guides/configure-workbox#custom_cache_names_in_strategies).\n * In other words, it can't be used to expire entries in strategy that uses the\n * default runtime cache name.\n *\n * Whenever a cached response is used or updated, this plugin will look\n * at the associated cache and remove any old or extra responses.\n *\n * When using `maxAgeSeconds`, responses may be used *once* after expiring\n * because the expiration clean up will not have occurred until *after* the\n * cached response has been used. If the response has a \"Date\" header, then\n * a light weight expiration check is performed and the response will not be\n * used immediately.\n *\n * When using `maxEntries`, the entry least-recently requested will be removed\n * from the cache first.\n *\n * @memberof workbox-expiration\n */\nclass ExpirationPlugin {\n /**\n * @param {ExpirationPluginOptions} config\n * @param {number} [config.maxEntries] The maximum number of entries to cache.\n * Entries used the least will be removed as the maximum is reached.\n * @param {number} [config.maxAgeSeconds] The maximum age of an entry before\n * it's treated as stale and removed.\n * @param {Object} [config.matchOptions] The [`CacheQueryOptions`](https://developer.mozilla.org/en-US/docs/Web/API/Cache/delete#Parameters)\n * that will be used when calling `delete()` on the cache.\n * @param {boolean} [config.purgeOnQuotaError] Whether to opt this cache in to\n * automatic deletion if the available storage quota has been exceeded.\n */\n constructor(config = {}) {\n /**\n * A \"lifecycle\" callback that will be triggered automatically by the\n * `workbox-strategies` handlers when a `Response` is about to be returned\n * from a [Cache](https://developer.mozilla.org/en-US/docs/Web/API/Cache) to\n * the handler. It allows the `Response` to be inspected for freshness and\n * prevents it from being used if the `Response`'s `Date` header value is\n * older than the configured `maxAgeSeconds`.\n *\n * @param {Object} options\n * @param {string} options.cacheName Name of the cache the response is in.\n * @param {Response} options.cachedResponse The `Response` object that's been\n * read from a cache and whose freshness should be checked.\n * @return {Response} Either the `cachedResponse`, if it's\n * fresh, or `null` if the `Response` is older than `maxAgeSeconds`.\n *\n * @private\n */\n this.cachedResponseWillBeUsed = async ({ event, request, cacheName, cachedResponse, }) => {\n if (!cachedResponse) {\n return null;\n }\n const isFresh = this._isResponseDateFresh(cachedResponse);\n // Expire entries to ensure that even if the expiration date has\n // expired, it'll only be used once.\n const cacheExpiration = this._getCacheExpiration(cacheName);\n dontWaitFor(cacheExpiration.expireEntries());\n // Update the metadata for the request URL to the current timestamp,\n // but don't `await` it as we don't want to block the response.\n const updateTimestampDone = cacheExpiration.updateTimestamp(request.url);\n if (event) {\n try {\n event.waitUntil(updateTimestampDone);\n }\n catch (error) {\n if (process.env.NODE_ENV !== 'production') {\n // The event may not be a fetch event; only log the URL if it is.\n if ('request' in event) {\n logger.warn(`Unable to ensure service worker stays alive when ` +\n `updating cache entry for ` +\n `'${getFriendlyURL(event.request.url)}'.`);\n }\n }\n }\n }\n return isFresh ? cachedResponse : null;\n };\n /**\n * A \"lifecycle\" callback that will be triggered automatically by the\n * `workbox-strategies` handlers when an entry is added to a cache.\n *\n * @param {Object} options\n * @param {string} options.cacheName Name of the cache that was updated.\n * @param {string} options.request The Request for the cached entry.\n *\n * @private\n */\n this.cacheDidUpdate = async ({ cacheName, request, }) => {\n if (process.env.NODE_ENV !== 'production') {\n assert.isType(cacheName, 'string', {\n moduleName: 'workbox-expiration',\n className: 'Plugin',\n funcName: 'cacheDidUpdate',\n paramName: 'cacheName',\n });\n assert.isInstance(request, Request, {\n moduleName: 'workbox-expiration',\n className: 'Plugin',\n funcName: 'cacheDidUpdate',\n paramName: 'request',\n });\n }\n const cacheExpiration = this._getCacheExpiration(cacheName);\n await cacheExpiration.updateTimestamp(request.url);\n await cacheExpiration.expireEntries();\n };\n if (process.env.NODE_ENV !== 'production') {\n if (!(config.maxEntries || config.maxAgeSeconds)) {\n throw new WorkboxError('max-entries-or-age-required', {\n moduleName: 'workbox-expiration',\n className: 'Plugin',\n funcName: 'constructor',\n });\n }\n if (config.maxEntries) {\n assert.isType(config.maxEntries, 'number', {\n moduleName: 'workbox-expiration',\n className: 'Plugin',\n funcName: 'constructor',\n paramName: 'config.maxEntries',\n });\n }\n if (config.maxAgeSeconds) {\n assert.isType(config.maxAgeSeconds, 'number', {\n moduleName: 'workbox-expiration',\n className: 'Plugin',\n funcName: 'constructor',\n paramName: 'config.maxAgeSeconds',\n });\n }\n }\n this._config = config;\n this._maxAgeSeconds = config.maxAgeSeconds;\n this._cacheExpirations = new Map();\n if (config.purgeOnQuotaError) {\n registerQuotaErrorCallback(() => this.deleteCacheAndMetadata());\n }\n }\n /**\n * A simple helper method to return a CacheExpiration instance for a given\n * cache name.\n *\n * @param {string} cacheName\n * @return {CacheExpiration}\n *\n * @private\n */\n _getCacheExpiration(cacheName) {\n if (cacheName === cacheNames.getRuntimeName()) {\n throw new WorkboxError('expire-custom-caches-only');\n }\n let cacheExpiration = this._cacheExpirations.get(cacheName);\n if (!cacheExpiration) {\n cacheExpiration = new CacheExpiration(cacheName, this._config);\n this._cacheExpirations.set(cacheName, cacheExpiration);\n }\n return cacheExpiration;\n }\n /**\n * @param {Response} cachedResponse\n * @return {boolean}\n *\n * @private\n */\n _isResponseDateFresh(cachedResponse) {\n if (!this._maxAgeSeconds) {\n // We aren't expiring by age, so return true, it's fresh\n return true;\n }\n // Check if the 'date' header will suffice a quick expiration check.\n // See https://github.com/GoogleChromeLabs/sw-toolbox/issues/164 for\n // discussion.\n const dateHeaderTimestamp = this._getDateHeaderTimestamp(cachedResponse);\n if (dateHeaderTimestamp === null) {\n // Unable to parse date, so assume it's fresh.\n return true;\n }\n // If we have a valid headerTime, then our response is fresh iff the\n // headerTime plus maxAgeSeconds is greater than the current time.\n const now = Date.now();\n return dateHeaderTimestamp >= now - this._maxAgeSeconds * 1000;\n }\n /**\n * This method will extract the data header and parse it into a useful\n * value.\n *\n * @param {Response} cachedResponse\n * @return {number|null}\n *\n * @private\n */\n _getDateHeaderTimestamp(cachedResponse) {\n if (!cachedResponse.headers.has('date')) {\n return null;\n }\n const dateHeader = cachedResponse.headers.get('date');\n const parsedDate = new Date(dateHeader);\n const headerTime = parsedDate.getTime();\n // If the Date header was invalid for some reason, parsedDate.getTime()\n // will return NaN.\n if (isNaN(headerTime)) {\n return null;\n }\n return headerTime;\n }\n /**\n * This is a helper method that performs two operations:\n *\n * - Deletes *all* the underlying Cache instances associated with this plugin\n * instance, by calling caches.delete() on your behalf.\n * - Deletes the metadata from IndexedDB used to keep track of expiration\n * details for each Cache instance.\n *\n * When using cache expiration, calling this method is preferable to calling\n * `caches.delete()` directly, since this will ensure that the IndexedDB\n * metadata is also cleanly removed and open IndexedDB instances are deleted.\n *\n * Note that if you're *not* using cache expiration for a given cache, calling\n * `caches.delete()` and passing in the cache's name should be sufficient.\n * There is no Workbox-specific method needed for cleanup in that case.\n */\n async deleteCacheAndMetadata() {\n // Do this one at a time instead of all at once via `Promise.all()` to\n // reduce the chance of inconsistency if a promise rejects.\n for (const [cacheName, cacheExpiration] of this._cacheExpirations) {\n await self.caches.delete(cacheName);\n await cacheExpiration.delete();\n }\n // Reset this._cacheExpirations to its initial state.\n this._cacheExpirations = new Map();\n }\n}\nexport { ExpirationPlugin };\n","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:precaching:7.2.0'] && _();\n}\ncatch (e) { }\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport '../_version.js';\n// Name of the search parameter used to store revision info.\nconst REVISION_SEARCH_PARAM = '__WB_REVISION__';\n/**\n * Converts a manifest entry into a versioned URL suitable for precaching.\n *\n * @param {Object|string} entry\n * @return {string} A URL with versioning info.\n *\n * @private\n * @memberof workbox-precaching\n */\nexport function createCacheKey(entry) {\n if (!entry) {\n throw new WorkboxError('add-to-cache-list-unexpected-type', { entry });\n }\n // If a precache manifest entry is a string, it's assumed to be a versioned\n // URL, like '/app.abcd1234.js'. Return as-is.\n if (typeof entry === 'string') {\n const urlObject = new URL(entry, location.href);\n return {\n cacheKey: urlObject.href,\n url: urlObject.href,\n };\n }\n const { revision, url } = entry;\n if (!url) {\n throw new WorkboxError('add-to-cache-list-unexpected-type', { entry });\n }\n // If there's just a URL and no revision, then it's also assumed to be a\n // versioned URL.\n if (!revision) {\n const urlObject = new URL(url, location.href);\n return {\n cacheKey: urlObject.href,\n url: urlObject.href,\n };\n }\n // Otherwise, construct a properly versioned URL using the custom Workbox\n // search parameter along with the revision info.\n const cacheKeyURL = new URL(url, location.href);\n const originalURL = new URL(url, location.href);\n cacheKeyURL.searchParams.set(REVISION_SEARCH_PARAM, revision);\n return {\n cacheKey: cacheKeyURL.href,\n url: originalURL.href,\n };\n}\n","/*\n Copyright 2020 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * A plugin, designed to be used with PrecacheController, to determine the\n * of assets that were updated (or not updated) during the install event.\n *\n * @private\n */\nclass PrecacheInstallReportPlugin {\n constructor() {\n this.updatedURLs = [];\n this.notUpdatedURLs = [];\n this.handlerWillStart = async ({ request, state, }) => {\n // TODO: `state` should never be undefined...\n if (state) {\n state.originalRequest = request;\n }\n };\n this.cachedResponseWillBeUsed = async ({ event, state, cachedResponse, }) => {\n if (event.type === 'install') {\n if (state &&\n state.originalRequest &&\n state.originalRequest instanceof Request) {\n // TODO: `state` should never be undefined...\n const url = state.originalRequest.url;\n if (cachedResponse) {\n this.notUpdatedURLs.push(url);\n }\n else {\n this.updatedURLs.push(url);\n }\n }\n }\n return cachedResponse;\n };\n }\n}\nexport { PrecacheInstallReportPlugin };\n","/*\n Copyright 2020 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * A plugin, designed to be used with PrecacheController, to translate URLs into\n * the corresponding cache key, based on the current revision info.\n *\n * @private\n */\nclass PrecacheCacheKeyPlugin {\n constructor({ precacheController }) {\n this.cacheKeyWillBeUsed = async ({ request, params, }) => {\n // Params is type any, can't change right now.\n /* eslint-disable */\n const cacheKey = (params === null || params === void 0 ? void 0 : params.cacheKey) ||\n this._precacheController.getCacheKeyForURL(request.url);\n /* eslint-enable */\n return cacheKey\n ? new Request(cacheKey, { headers: request.headers })\n : request;\n };\n this._precacheController = precacheController;\n }\n}\nexport { PrecacheCacheKeyPlugin };\n","/*\n Copyright 2020 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { copyResponse } from 'workbox-core/copyResponse.js';\nimport { cacheNames } from 'workbox-core/_private/cacheNames.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { Strategy } from 'workbox-strategies/Strategy.js';\nimport './_version.js';\n/**\n * A {@link workbox-strategies.Strategy} implementation\n * specifically designed to work with\n * {@link workbox-precaching.PrecacheController}\n * to both cache and fetch precached assets.\n *\n * Note: an instance of this class is created automatically when creating a\n * `PrecacheController`; it's generally not necessary to create this yourself.\n *\n * @extends workbox-strategies.Strategy\n * @memberof workbox-precaching\n */\nclass PrecacheStrategy extends Strategy {\n /**\n *\n * @param {Object} [options]\n * @param {string} [options.cacheName] Cache name to store and retrieve\n * requests. Defaults to the cache names provided by\n * {@link workbox-core.cacheNames}.\n * @param {Array} [options.plugins] {@link https://developers.google.com/web/tools/workbox/guides/using-plugins|Plugins}\n * to use in conjunction with this caching strategy.\n * @param {Object} [options.fetchOptions] Values passed along to the\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters|init}\n * of all fetch() requests made by this strategy.\n * @param {Object} [options.matchOptions] The\n * {@link https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions|CacheQueryOptions}\n * for any `cache.match()` or `cache.put()` calls made by this strategy.\n * @param {boolean} [options.fallbackToNetwork=true] Whether to attempt to\n * get the response from the network if there's a precache miss.\n */\n constructor(options = {}) {\n options.cacheName = cacheNames.getPrecacheName(options.cacheName);\n super(options);\n this._fallbackToNetwork =\n options.fallbackToNetwork === false ? false : true;\n // Redirected responses cannot be used to satisfy a navigation request, so\n // any redirected response must be \"copied\" rather than cloned, so the new\n // response doesn't contain the `redirected` flag. See:\n // https://bugs.chromium.org/p/chromium/issues/detail?id=669363&desc=2#c1\n this.plugins.push(PrecacheStrategy.copyRedirectedCacheableResponsesPlugin);\n }\n /**\n * @private\n * @param {Request|string} request A request to run this strategy for.\n * @param {workbox-strategies.StrategyHandler} handler The event that\n * triggered the request.\n * @return {Promise}\n */\n async _handle(request, handler) {\n const response = await handler.cacheMatch(request);\n if (response) {\n return response;\n }\n // If this is an `install` event for an entry that isn't already cached,\n // then populate the cache.\n if (handler.event && handler.event.type === 'install') {\n return await this._handleInstall(request, handler);\n }\n // Getting here means something went wrong. An entry that should have been\n // precached wasn't found in the cache.\n return await this._handleFetch(request, handler);\n }\n async _handleFetch(request, handler) {\n let response;\n const params = (handler.params || {});\n // Fall back to the network if we're configured to do so.\n if (this._fallbackToNetwork) {\n if (process.env.NODE_ENV !== 'production') {\n logger.warn(`The precached response for ` +\n `${getFriendlyURL(request.url)} in ${this.cacheName} was not ` +\n `found. Falling back to the network.`);\n }\n const integrityInManifest = params.integrity;\n const integrityInRequest = request.integrity;\n const noIntegrityConflict = !integrityInRequest || integrityInRequest === integrityInManifest;\n // Do not add integrity if the original request is no-cors\n // See https://github.com/GoogleChrome/workbox/issues/3096\n response = await handler.fetch(new Request(request, {\n integrity: request.mode !== 'no-cors'\n ? integrityInRequest || integrityInManifest\n : undefined,\n }));\n // It's only \"safe\" to repair the cache if we're using SRI to guarantee\n // that the response matches the precache manifest's expectations,\n // and there's either a) no integrity property in the incoming request\n // or b) there is an integrity, and it matches the precache manifest.\n // See https://github.com/GoogleChrome/workbox/issues/2858\n // Also if the original request users no-cors we don't use integrity.\n // See https://github.com/GoogleChrome/workbox/issues/3096\n if (integrityInManifest &&\n noIntegrityConflict &&\n request.mode !== 'no-cors') {\n this._useDefaultCacheabilityPluginIfNeeded();\n const wasCached = await handler.cachePut(request, response.clone());\n if (process.env.NODE_ENV !== 'production') {\n if (wasCached) {\n logger.log(`A response for ${getFriendlyURL(request.url)} ` +\n `was used to \"repair\" the precache.`);\n }\n }\n }\n }\n else {\n // This shouldn't normally happen, but there are edge cases:\n // https://github.com/GoogleChrome/workbox/issues/1441\n throw new WorkboxError('missing-precache-entry', {\n cacheName: this.cacheName,\n url: request.url,\n });\n }\n if (process.env.NODE_ENV !== 'production') {\n const cacheKey = params.cacheKey || (await handler.getCacheKey(request, 'read'));\n // Workbox is going to handle the route.\n // print the routing details to the console.\n logger.groupCollapsed(`Precaching is responding to: ` + getFriendlyURL(request.url));\n logger.log(`Serving the precached url: ${getFriendlyURL(cacheKey instanceof Request ? cacheKey.url : cacheKey)}`);\n logger.groupCollapsed(`View request details here.`);\n logger.log(request);\n logger.groupEnd();\n logger.groupCollapsed(`View response details here.`);\n logger.log(response);\n logger.groupEnd();\n logger.groupEnd();\n }\n return response;\n }\n async _handleInstall(request, handler) {\n this._useDefaultCacheabilityPluginIfNeeded();\n const response = await handler.fetch(request);\n // Make sure we defer cachePut() until after we know the response\n // should be cached; see https://github.com/GoogleChrome/workbox/issues/2737\n const wasCached = await handler.cachePut(request, response.clone());\n if (!wasCached) {\n // Throwing here will lead to the `install` handler failing, which\n // we want to do if *any* of the responses aren't safe to cache.\n throw new WorkboxError('bad-precaching-response', {\n url: request.url,\n status: response.status,\n });\n }\n return response;\n }\n /**\n * This method is complex, as there a number of things to account for:\n *\n * The `plugins` array can be set at construction, and/or it might be added to\n * to at any time before the strategy is used.\n *\n * At the time the strategy is used (i.e. during an `install` event), there\n * needs to be at least one plugin that implements `cacheWillUpdate` in the\n * array, other than `copyRedirectedCacheableResponsesPlugin`.\n *\n * - If this method is called and there are no suitable `cacheWillUpdate`\n * plugins, we need to add `defaultPrecacheCacheabilityPlugin`.\n *\n * - If this method is called and there is exactly one `cacheWillUpdate`, then\n * we don't have to do anything (this might be a previously added\n * `defaultPrecacheCacheabilityPlugin`, or it might be a custom plugin).\n *\n * - If this method is called and there is more than one `cacheWillUpdate`,\n * then we need to check if one is `defaultPrecacheCacheabilityPlugin`. If so,\n * we need to remove it. (This situation is unlikely, but it could happen if\n * the strategy is used multiple times, the first without a `cacheWillUpdate`,\n * and then later on after manually adding a custom `cacheWillUpdate`.)\n *\n * See https://github.com/GoogleChrome/workbox/issues/2737 for more context.\n *\n * @private\n */\n _useDefaultCacheabilityPluginIfNeeded() {\n let defaultPluginIndex = null;\n let cacheWillUpdatePluginCount = 0;\n for (const [index, plugin] of this.plugins.entries()) {\n // Ignore the copy redirected plugin when determining what to do.\n if (plugin === PrecacheStrategy.copyRedirectedCacheableResponsesPlugin) {\n continue;\n }\n // Save the default plugin's index, in case it needs to be removed.\n if (plugin === PrecacheStrategy.defaultPrecacheCacheabilityPlugin) {\n defaultPluginIndex = index;\n }\n if (plugin.cacheWillUpdate) {\n cacheWillUpdatePluginCount++;\n }\n }\n if (cacheWillUpdatePluginCount === 0) {\n this.plugins.push(PrecacheStrategy.defaultPrecacheCacheabilityPlugin);\n }\n else if (cacheWillUpdatePluginCount > 1 && defaultPluginIndex !== null) {\n // Only remove the default plugin; multiple custom plugins are allowed.\n this.plugins.splice(defaultPluginIndex, 1);\n }\n // Nothing needs to be done if cacheWillUpdatePluginCount is 1\n }\n}\nPrecacheStrategy.defaultPrecacheCacheabilityPlugin = {\n async cacheWillUpdate({ response }) {\n if (!response || response.status >= 400) {\n return null;\n }\n return response;\n },\n};\nPrecacheStrategy.copyRedirectedCacheableResponsesPlugin = {\n async cacheWillUpdate({ response }) {\n return response.redirected ? await copyResponse(response) : response;\n },\n};\nexport { PrecacheStrategy };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { cacheNames } from 'workbox-core/_private/cacheNames.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { waitUntil } from 'workbox-core/_private/waitUntil.js';\nimport { createCacheKey } from './utils/createCacheKey.js';\nimport { PrecacheInstallReportPlugin } from './utils/PrecacheInstallReportPlugin.js';\nimport { PrecacheCacheKeyPlugin } from './utils/PrecacheCacheKeyPlugin.js';\nimport { printCleanupDetails } from './utils/printCleanupDetails.js';\nimport { printInstallDetails } from './utils/printInstallDetails.js';\nimport { PrecacheStrategy } from './PrecacheStrategy.js';\nimport './_version.js';\n/**\n * Performs efficient precaching of assets.\n *\n * @memberof workbox-precaching\n */\nclass PrecacheController {\n /**\n * Create a new PrecacheController.\n *\n * @param {Object} [options]\n * @param {string} [options.cacheName] The cache to use for precaching.\n * @param {string} [options.plugins] Plugins to use when precaching as well\n * as responding to fetch events for precached assets.\n * @param {boolean} [options.fallbackToNetwork=true] Whether to attempt to\n * get the response from the network if there's a precache miss.\n */\n constructor({ cacheName, plugins = [], fallbackToNetwork = true, } = {}) {\n this._urlsToCacheKeys = new Map();\n this._urlsToCacheModes = new Map();\n this._cacheKeysToIntegrities = new Map();\n this._strategy = new PrecacheStrategy({\n cacheName: cacheNames.getPrecacheName(cacheName),\n plugins: [\n ...plugins,\n new PrecacheCacheKeyPlugin({ precacheController: this }),\n ],\n fallbackToNetwork,\n });\n // Bind the install and activate methods to the instance.\n this.install = this.install.bind(this);\n this.activate = this.activate.bind(this);\n }\n /**\n * @type {workbox-precaching.PrecacheStrategy} The strategy created by this controller and\n * used to cache assets and respond to fetch events.\n */\n get strategy() {\n return this._strategy;\n }\n /**\n * Adds items to the precache list, removing any duplicates and\n * stores the files in the\n * {@link workbox-core.cacheNames|\"precache cache\"} when the service\n * worker installs.\n *\n * This method can be called multiple times.\n *\n * @param {Array} [entries=[]] Array of entries to precache.\n */\n precache(entries) {\n this.addToCacheList(entries);\n if (!this._installAndActiveListenersAdded) {\n self.addEventListener('install', this.install);\n self.addEventListener('activate', this.activate);\n this._installAndActiveListenersAdded = true;\n }\n }\n /**\n * This method will add items to the precache list, removing duplicates\n * and ensuring the information is valid.\n *\n * @param {Array} entries\n * Array of entries to precache.\n */\n addToCacheList(entries) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isArray(entries, {\n moduleName: 'workbox-precaching',\n className: 'PrecacheController',\n funcName: 'addToCacheList',\n paramName: 'entries',\n });\n }\n const urlsToWarnAbout = [];\n for (const entry of entries) {\n // See https://github.com/GoogleChrome/workbox/issues/2259\n if (typeof entry === 'string') {\n urlsToWarnAbout.push(entry);\n }\n else if (entry && entry.revision === undefined) {\n urlsToWarnAbout.push(entry.url);\n }\n const { cacheKey, url } = createCacheKey(entry);\n const cacheMode = typeof entry !== 'string' && entry.revision ? 'reload' : 'default';\n if (this._urlsToCacheKeys.has(url) &&\n this._urlsToCacheKeys.get(url) !== cacheKey) {\n throw new WorkboxError('add-to-cache-list-conflicting-entries', {\n firstEntry: this._urlsToCacheKeys.get(url),\n secondEntry: cacheKey,\n });\n }\n if (typeof entry !== 'string' && entry.integrity) {\n if (this._cacheKeysToIntegrities.has(cacheKey) &&\n this._cacheKeysToIntegrities.get(cacheKey) !== entry.integrity) {\n throw new WorkboxError('add-to-cache-list-conflicting-integrities', {\n url,\n });\n }\n this._cacheKeysToIntegrities.set(cacheKey, entry.integrity);\n }\n this._urlsToCacheKeys.set(url, cacheKey);\n this._urlsToCacheModes.set(url, cacheMode);\n if (urlsToWarnAbout.length > 0) {\n const warningMessage = `Workbox is precaching URLs without revision ` +\n `info: ${urlsToWarnAbout.join(', ')}\\nThis is generally NOT safe. ` +\n `Learn more at https://bit.ly/wb-precache`;\n if (process.env.NODE_ENV === 'production') {\n // Use console directly to display this warning without bloating\n // bundle sizes by pulling in all of the logger codebase in prod.\n console.warn(warningMessage);\n }\n else {\n logger.warn(warningMessage);\n }\n }\n }\n }\n /**\n * Precaches new and updated assets. Call this method from the service worker\n * install event.\n *\n * Note: this method calls `event.waitUntil()` for you, so you do not need\n * to call it yourself in your event handlers.\n *\n * @param {ExtendableEvent} event\n * @return {Promise}\n */\n install(event) {\n // waitUntil returns Promise\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return waitUntil(event, async () => {\n const installReportPlugin = new PrecacheInstallReportPlugin();\n this.strategy.plugins.push(installReportPlugin);\n // Cache entries one at a time.\n // See https://github.com/GoogleChrome/workbox/issues/2528\n for (const [url, cacheKey] of this._urlsToCacheKeys) {\n const integrity = this._cacheKeysToIntegrities.get(cacheKey);\n const cacheMode = this._urlsToCacheModes.get(url);\n const request = new Request(url, {\n integrity,\n cache: cacheMode,\n credentials: 'same-origin',\n });\n await Promise.all(this.strategy.handleAll({\n params: { cacheKey },\n request,\n event,\n }));\n }\n const { updatedURLs, notUpdatedURLs } = installReportPlugin;\n if (process.env.NODE_ENV !== 'production') {\n printInstallDetails(updatedURLs, notUpdatedURLs);\n }\n return { updatedURLs, notUpdatedURLs };\n });\n }\n /**\n * Deletes assets that are no longer present in the current precache manifest.\n * Call this method from the service worker activate event.\n *\n * Note: this method calls `event.waitUntil()` for you, so you do not need\n * to call it yourself in your event handlers.\n *\n * @param {ExtendableEvent} event\n * @return {Promise}\n */\n activate(event) {\n // waitUntil returns Promise\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return waitUntil(event, async () => {\n const cache = await self.caches.open(this.strategy.cacheName);\n const currentlyCachedRequests = await cache.keys();\n const expectedCacheKeys = new Set(this._urlsToCacheKeys.values());\n const deletedURLs = [];\n for (const request of currentlyCachedRequests) {\n if (!expectedCacheKeys.has(request.url)) {\n await cache.delete(request);\n deletedURLs.push(request.url);\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n printCleanupDetails(deletedURLs);\n }\n return { deletedURLs };\n });\n }\n /**\n * Returns a mapping of a precached URL to the corresponding cache key, taking\n * into account the revision information for the URL.\n *\n * @return {Map} A URL to cache key mapping.\n */\n getURLsToCacheKeys() {\n return this._urlsToCacheKeys;\n }\n /**\n * Returns a list of all the URLs that have been precached by the current\n * service worker.\n *\n * @return {Array} The precached URLs.\n */\n getCachedURLs() {\n return [...this._urlsToCacheKeys.keys()];\n }\n /**\n * Returns the cache key used for storing a given URL. If that URL is\n * unversioned, like `/index.html', then the cache key will be the original\n * URL with a search parameter appended to it.\n *\n * @param {string} url A URL whose cache key you want to look up.\n * @return {string} The versioned URL that corresponds to a cache key\n * for the original URL, or undefined if that URL isn't precached.\n */\n getCacheKeyForURL(url) {\n const urlObject = new URL(url, location.href);\n return this._urlsToCacheKeys.get(urlObject.href);\n }\n /**\n * @param {string} url A cache key whose SRI you want to look up.\n * @return {string} The subresource integrity associated with the cache key,\n * or undefined if it's not set.\n */\n getIntegrityForCacheKey(cacheKey) {\n return this._cacheKeysToIntegrities.get(cacheKey);\n }\n /**\n * This acts as a drop-in replacement for\n * [`cache.match()`](https://developer.mozilla.org/en-US/docs/Web/API/Cache/match)\n * with the following differences:\n *\n * - It knows what the name of the precache is, and only checks in that cache.\n * - It allows you to pass in an \"original\" URL without versioning parameters,\n * and it will automatically look up the correct cache key for the currently\n * active revision of that URL.\n *\n * E.g., `matchPrecache('index.html')` will find the correct precached\n * response for the currently active service worker, even if the actual cache\n * key is `'/index.html?__WB_REVISION__=1234abcd'`.\n *\n * @param {string|Request} request The key (without revisioning parameters)\n * to look up in the precache.\n * @return {Promise}\n */\n async matchPrecache(request) {\n const url = request instanceof Request ? request.url : request;\n const cacheKey = this.getCacheKeyForURL(url);\n if (cacheKey) {\n const cache = await self.caches.open(this.strategy.cacheName);\n return cache.match(cacheKey);\n }\n return undefined;\n }\n /**\n * Returns a function that looks up `url` in the precache (taking into\n * account revision information), and returns the corresponding `Response`.\n *\n * @param {string} url The precached URL which will be used to lookup the\n * `Response`.\n * @return {workbox-routing~handlerCallback}\n */\n createHandlerBoundToURL(url) {\n const cacheKey = this.getCacheKeyForURL(url);\n if (!cacheKey) {\n throw new WorkboxError('non-precached-url', { url });\n }\n return (options) => {\n options.request = new Request(url);\n options.params = Object.assign({ cacheKey }, options.params);\n return this.strategy.handle(options);\n };\n }\n}\nexport { PrecacheController };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { PrecacheController } from '../PrecacheController.js';\nimport '../_version.js';\nlet precacheController;\n/**\n * @return {PrecacheController}\n * @private\n */\nexport const getOrCreatePrecacheController = () => {\n if (!precacheController) {\n precacheController = new PrecacheController();\n }\n return precacheController;\n};\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * Removes any URL search parameters that should be ignored.\n *\n * @param {URL} urlObject The original URL.\n * @param {Array} ignoreURLParametersMatching RegExps to test against\n * each search parameter name. Matches mean that the search parameter should be\n * ignored.\n * @return {URL} The URL with any ignored search parameters removed.\n *\n * @private\n * @memberof workbox-precaching\n */\nexport function removeIgnoredSearchParams(urlObject, ignoreURLParametersMatching = []) {\n // Convert the iterable into an array at the start of the loop to make sure\n // deletion doesn't mess up iteration.\n for (const paramName of [...urlObject.searchParams.keys()]) {\n if (ignoreURLParametersMatching.some((regExp) => regExp.test(paramName))) {\n urlObject.searchParams.delete(paramName);\n }\n }\n return urlObject;\n}\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { removeIgnoredSearchParams } from './removeIgnoredSearchParams.js';\nimport '../_version.js';\n/**\n * Generator function that yields possible variations on the original URL to\n * check, one at a time.\n *\n * @param {string} url\n * @param {Object} options\n *\n * @private\n * @memberof workbox-precaching\n */\nexport function* generateURLVariations(url, { ignoreURLParametersMatching = [/^utm_/, /^fbclid$/], directoryIndex = 'index.html', cleanURLs = true, urlManipulation, } = {}) {\n const urlObject = new URL(url, location.href);\n urlObject.hash = '';\n yield urlObject.href;\n const urlWithoutIgnoredParams = removeIgnoredSearchParams(urlObject, ignoreURLParametersMatching);\n yield urlWithoutIgnoredParams.href;\n if (directoryIndex && urlWithoutIgnoredParams.pathname.endsWith('/')) {\n const directoryURL = new URL(urlWithoutIgnoredParams.href);\n directoryURL.pathname += directoryIndex;\n yield directoryURL.href;\n }\n if (cleanURLs) {\n const cleanURL = new URL(urlWithoutIgnoredParams.href);\n cleanURL.pathname += '.html';\n yield cleanURL.href;\n }\n if (urlManipulation) {\n const additionalURLs = urlManipulation({ url: urlObject });\n for (const urlToAttempt of additionalURLs) {\n yield urlToAttempt.href;\n }\n }\n}\n","/*\n Copyright 2020 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { Route } from 'workbox-routing/Route.js';\nimport { generateURLVariations } from './utils/generateURLVariations.js';\nimport './_version.js';\n/**\n * A subclass of {@link workbox-routing.Route} that takes a\n * {@link workbox-precaching.PrecacheController}\n * instance and uses it to match incoming requests and handle fetching\n * responses from the precache.\n *\n * @memberof workbox-precaching\n * @extends workbox-routing.Route\n */\nclass PrecacheRoute extends Route {\n /**\n * @param {PrecacheController} precacheController A `PrecacheController`\n * instance used to both match requests and respond to fetch events.\n * @param {Object} [options] Options to control how requests are matched\n * against the list of precached URLs.\n * @param {string} [options.directoryIndex=index.html] The `directoryIndex` will\n * check cache entries for a URLs ending with '/' to see if there is a hit when\n * appending the `directoryIndex` value.\n * @param {Array} [options.ignoreURLParametersMatching=[/^utm_/, /^fbclid$/]] An\n * array of regex's to remove search params when looking for a cache match.\n * @param {boolean} [options.cleanURLs=true] The `cleanURLs` option will\n * check the cache for the URL with a `.html` added to the end of the end.\n * @param {workbox-precaching~urlManipulation} [options.urlManipulation]\n * This is a function that should take a URL and return an array of\n * alternative URLs that should be checked for precache matches.\n */\n constructor(precacheController, options) {\n const match = ({ request, }) => {\n const urlsToCacheKeys = precacheController.getURLsToCacheKeys();\n for (const possibleURL of generateURLVariations(request.url, options)) {\n const cacheKey = urlsToCacheKeys.get(possibleURL);\n if (cacheKey) {\n const integrity = precacheController.getIntegrityForCacheKey(cacheKey);\n return { cacheKey, integrity };\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Precaching did not find a match for ` + getFriendlyURL(request.url));\n }\n return;\n };\n super(match, precacheController.strategy);\n }\n}\nexport { PrecacheRoute };\n","/*\n Copyright 2019 Google LLC\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { registerRoute } from 'workbox-routing/registerRoute.js';\nimport { getOrCreatePrecacheController } from './utils/getOrCreatePrecacheController.js';\nimport { PrecacheRoute } from './PrecacheRoute.js';\nimport './_version.js';\n/**\n * Add a `fetch` listener to the service worker that will\n * respond to\n * [network requests]{@link https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers#Custom_responses_to_requests}\n * with precached assets.\n *\n * Requests for assets that aren't precached, the `FetchEvent` will not be\n * responded to, allowing the event to fall through to other `fetch` event\n * listeners.\n *\n * @param {Object} [options] See the {@link workbox-precaching.PrecacheRoute}\n * options.\n *\n * @memberof workbox-precaching\n */\nfunction addRoute(options) {\n const precacheController = getOrCreatePrecacheController();\n const precacheRoute = new PrecacheRoute(precacheController, options);\n registerRoute(precacheRoute);\n}\nexport { addRoute };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { getOrCreatePrecacheController } from './utils/getOrCreatePrecacheController.js';\nimport './_version.js';\n/**\n * Adds items to the precache list, removing any duplicates and\n * stores the files in the\n * {@link workbox-core.cacheNames|\"precache cache\"} when the service\n * worker installs.\n *\n * This method can be called multiple times.\n *\n * Please note: This method **will not** serve any of the cached files for you.\n * It only precaches files. To respond to a network request you call\n * {@link workbox-precaching.addRoute}.\n *\n * If you have a single array of files to precache, you can just call\n * {@link workbox-precaching.precacheAndRoute}.\n *\n * @param {Array} [entries=[]] Array of entries to precache.\n *\n * @memberof workbox-precaching\n */\nfunction precache(entries) {\n const precacheController = getOrCreatePrecacheController();\n precacheController.precache(entries);\n}\nexport { precache };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { addRoute } from './addRoute.js';\nimport { precache } from './precache.js';\nimport './_version.js';\n/**\n * This method will add entries to the precache list and add a route to\n * respond to fetch events.\n *\n * This is a convenience method that will call\n * {@link workbox-precaching.precache} and\n * {@link workbox-precaching.addRoute} in a single call.\n *\n * @param {Array} entries Array of entries to precache.\n * @param {Object} [options] See the\n * {@link workbox-precaching.PrecacheRoute} options.\n *\n * @memberof workbox-precaching\n */\nfunction precacheAndRoute(entries, options) {\n precache(entries);\n addRoute(options);\n}\nexport { precacheAndRoute };\n","export const CONFIG = {\n TIMEZONE: \"Europe/Vienna\",\n SEASON: new Date().getFullYear(),\n API_BASE: \"https://api.hardbulls.com/\",\n BULLS_LEAGUES: [\"bbl\"],\n ASSET_JSON_CACHE_TTL: 60 * 60, // 1h\n ASSET_IMAGE_CACHE_TTL: 60 * 60 * 24 // 1d\n}\n","/// \n\nimport 'workbox-core';\nimport { registerRoute } from 'workbox-routing';\nimport { StaleWhileRevalidate, CacheFirst } from 'workbox-strategies';\nimport { clientsClaim } from 'workbox-core';\nimport { escapeRegExp } from \"./regex\";\nimport { ExpirationPlugin } from 'workbox-expiration';\nimport { precacheAndRoute } from 'workbox-precaching';\nimport { CONFIG } from \"./config\";\n\ndeclare var self: ServiceWorkerGlobalScope & typeof globalThis;\n\nself.__WB_DISABLE_DEV_LOGS = true\n\nself.addEventListener('install', async (_) => {\n await self.skipWaiting();\n});\n\nclientsClaim();\n\nprecacheAndRoute(self.__WB_MANIFEST);\n\nregisterRoute(\n new RegExp(`^${escapeRegExp(CONFIG.API_BASE)}api\\/.*\\\\.json$`),\n new StaleWhileRevalidate({\n cacheName: 'api-json-cache',\n plugins: [\n new ExpirationPlugin({\n purgeOnQuotaError: true,\n maxAgeSeconds: CONFIG.ASSET_JSON_CACHE_TTL\n }),\n ],\n })\n);\n\nregisterRoute(\n new RegExp(`^${escapeRegExp(CONFIG.API_BASE)}assets\\/.*\\\\.(?:png|jpg|jpeg|svg|webp)$`),\n new CacheFirst({\n cacheName: 'api-assets-cache-v1',\n plugins: [\n new ExpirationPlugin({\n maxAgeSeconds: CONFIG.ASSET_IMAGE_CACHE_TTL,\n purgeOnQuotaError: true,\n }),\n ],\n })\n );"]} \ No newline at end of file diff --git a/assets/config-BSEdrMJ9.js b/assets/config-BSEdrMJ9.js new file mode 100644 index 0000000..20fe902 --- /dev/null +++ b/assets/config-BSEdrMJ9.js @@ -0,0 +1 @@ +const E={TIMEZONE:"Europe/Vienna",SEASON:new Date().getFullYear(),API_BASE:"https://api.hardbulls.com/",BULLS_LEAGUES:["bbl"],ASSET_JSON_CACHE_TTL:3600,ASSET_IMAGE_CACHE_TTL:86400};export{E as C}; diff --git a/assets/config-Bk6KWWaJ.js b/assets/config-Bk6KWWaJ.js deleted file mode 100644 index 1b259a1..0000000 --- a/assets/config-Bk6KWWaJ.js +++ /dev/null @@ -1,13 +0,0 @@ -const CONFIG = { - TIMEZONE: "Europe/Vienna", - SEASON: (/* @__PURE__ */ new Date()).getFullYear(), - API_BASE: "https://api.hardbulls.com/", - BULLS_LEAGUES: ["bbl"], - ASSET_JSON_CACHE_TTL: 60 * 60, - // 1h - ASSET_IMAGE_CACHE_TTL: 60 * 60 * 24 - // 1d -}; - -export { CONFIG as C }; -//# sourceMappingURL=config-Bk6KWWaJ.js.map diff --git a/assets/config-Bk6KWWaJ.js.map b/assets/config-Bk6KWWaJ.js.map deleted file mode 100644 index a600f6b..0000000 --- a/assets/config-Bk6KWWaJ.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"config-Bk6KWWaJ.js","sources":["../../src/config.ts"],"sourcesContent":["export const CONFIG = {\n TIMEZONE: \"Europe/Vienna\",\n SEASON: new Date().getFullYear(),\n API_BASE: \"https://api.hardbulls.com/\",\n BULLS_LEAGUES: [\"bbl\"],\n ASSET_JSON_CACHE_TTL: 60 * 60, // 1h\n ASSET_IMAGE_CACHE_TTL: 60 * 60 * 24 // 1d\n}\n"],"names":[],"mappings":"AAAO,MAAM,MAAS,GAAA;AAAA,EAClB,QAAU,EAAA,eAAA;AAAA,EACV,MAAQ,EAAA,iBAAA,IAAI,IAAK,EAAA,EAAE,WAAY,EAAA;AAAA,EAC/B,QAAU,EAAA,4BAAA;AAAA,EACV,aAAA,EAAe,CAAC,KAAK,CAAA;AAAA,EACrB,sBAAsB,EAAK,GAAA,EAAA;AAAA;AAAA,EAC3B,qBAAA,EAAuB,KAAK,EAAK,GAAA;AAAA;AACrC;;;;"} \ No newline at end of file diff --git a/index.html b/index.html index dd8f8a0..d4a8fe3 100644 --- a/index.html +++ b/index.html @@ -4,7 +4,7 @@ - + Hard Bulls App @@ -22,6 +22,7 @@ width: 100%; height: 100dvh; overscroll-behavior: none; + overscroll-behavior-x: none; } body { @@ -31,6 +32,8 @@ background-color: #ffffff; touch-action: none; overscroll-behavior: none; + overscroll-behavior-x: none; + display: none; /* Initially hide the body */ } @media (prefers-color-scheme: dark) { @@ -59,19 +62,30 @@ } } - - + + - + + - + - + + + diff --git a/main.DKMXZ9nr.js b/main.DKMXZ9nr.js new file mode 100644 index 0000000..469b4bf --- /dev/null +++ b/main.DKMXZ9nr.js @@ -0,0 +1,2043 @@ +import{C as v}from"./assets/config-BSEdrMJ9.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))i(a);new MutationObserver(a=>{for(const n of a)if(n.type==="childList")for(const r of n.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&i(r)}).observe(document,{childList:!0,subtree:!0});function e(a){const n={};return a.integrity&&(n.integrity=a.integrity),a.referrerPolicy&&(n.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?n.credentials="include":a.crossOrigin==="anonymous"?n.credentials="omit":n.credentials="same-origin",n}function i(a){if(a.ep)return;a.ep=!0;const n=e(a);fetch(a.href,n)}})();class h{static state={theme:"auto",language:"auto",showPastGames:!1,showPastEvents:!1,leagues:[]};static setTheme(t){localStorage.setItem("theme",t),h.state.theme=t}static getTheme(){return h.state.theme}static setLanguage(t){localStorage.setItem("language",t),h.state.language=t}static getLanguage(){return h.state.language}static setShowPastGames(t){localStorage.setItem("showPastGames",JSON.stringify(t)),h.state.showPastGames=t}static getShowPastGames(){return h.state.showPastGames}static setShowPastEvents(t){localStorage.setItem("showPastEvents",JSON.stringify(t)),h.state.showPastEvents=t}static getShowPastEvents(){return h.state.showPastEvents}static setLeagues(t){localStorage.setItem("leagues",JSON.stringify(t)),h.state.leagues=t}static addLeague(t){const e=h.getLeagues();e.includes(t)||(e.push(t),h.setLeagues(e))}static removeLeague(t){h.setLeagues(h.getLeagues().filter(e=>e!==t))}static getLeagues(){return h.state.leagues}static getStateString(){return JSON.stringify(this.state)}static load(){const t=localStorage.getItem("leagues");h.state={theme:localStorage.getItem("theme")||"auto",language:localStorage.getItem("language")||"auto",showPastGames:localStorage.getItem("showPastGames")==="true",showPastEvents:localStorage.getItem("showPastEvents")==="true",leagues:t?JSON.parse(t):[]}}}h.load();let N="x",_=[];function yt(s){N=s}function c(s,t,e){_.push(()=>{window.customElements.define(`${N}-${s}`,t,e)})}function wt(){for(const s of _)s();_=[]}function l(){return N}function o(s){return`var(--${l()}-${s})`}function kt(){document.addEventListener("DOMContentLoaded",function(){const s=`${l()}-theme`,t=document.querySelector(s);if(!t)throw new Error(`Not theme tag found: ${s}`);if(t.style.display!=="none")throw new Error('Theme tag needs inline style of "display: none" for the wait functionality to work.');t&&customElements.get(s)?t.style.display="":customElements.whenDefined(s).then(()=>{t.style.display=""})})}var k=(s=>(s[s.XS=480]="XS",s[s.MD=600]="MD",s[s.LG=960]="LG",s[s.XL=1280]="XL",s))(k||{}),E=(s=>(s.LIGHT="light",s.DARK="dark",s.AUTO="auto",s))(E||{});function x(s){let t=0,e=0,i=0;return s.length===4?(t=parseInt(s[1]+s[1],16),e=parseInt(s[2]+s[2],16),i=parseInt(s[3]+s[3],16)):s.length===7&&(t=parseInt(s[1]+s[2],16),e=parseInt(s[3]+s[4],16),i=parseInt(s[5]+s[6],16)),`${t}, ${e}, ${i}`}function u(s,t){let e=!1;s[0]==="#"&&(s=s.slice(1),e=!0);const i=parseInt(s,16);let a=(i>>16)+t;a=a>255?255:a<0?0:a;let n=(i>>8&255)+t;n=n>255?255:n<0?0:n;let r=(i&255)+t;return r=r>255?255:r<0?0:r,(e?"#":"")+(16777216+(a<<16)+(n<<8)+r).toString(16).slice(1)}function Et(s,t,e,i,a){function n(r,d,p,b){const z=b?60:-60,H=x(r),P=x(d),I=x(p);return{primary:{50:u(r,100),100:u(r,70),200:u(r,50),300:u(r,30),400:u(r,20),500:r,600:u(r,-10),700:u(r,-20),800:u(r,-30),900:u(r,-50)},secondary:{50:u(r,-100),100:u(r,-70),200:u(r,-50),300:u(r,-30),400:u(r,-20),500:u(r,-10),600:u(r,-20),700:u(r,-30),800:u(r,-40),900:u(r,-50)},background:{50:u(d,100),100:u(d,70),200:u(d,50),300:u(d,30),400:u(d,20),500:d,600:u(d,-10),700:u(d,-20),800:u(d,-30),900:u(d,-50),1e3:u(d,-80)},neutral:{background:d,text:p,border:u(d,z)},rgb:{primary:H,secondary:x(u(r,-20)),background:P,text:I,border:x(u(d,z))}}}return{light:n(s,e,t,!1),dark:n(s,a,i,!0)}}function $t(s){function t(i){const{primary:a,secondary:n,neutral:r,rgb:d,background:p}=s[i];return` + --${i}-primary-50: ${a[50]}; + --${i}-primary-100: ${a[100]}; + --${i}-primary-200: ${a[200]}; + --${i}-primary-300: ${a[300]}; + --${i}-primary-400: ${a[400]}; + --${i}-primary-500: ${a[500]}; + --${i}-primary-600: ${a[600]}; + --${i}-primary-700: ${a[700]}; + --${i}-primary-800: ${a[800]}; + --${i}-primary-900: ${a[900]}; + + + --${i}-primary-100_rgb: ${x(a[100])}; + --${i}-primary-900_rgb: ${x(a[900])}; + + --${i}-secondary-50: ${n[50]}; + --${i}-secondary-100: ${n[100]}; + --${i}-secondary-200: ${n[200]}; + --${i}-secondary-300: ${n[300]}; + --${i}-secondary-400: ${n[400]}; + --${i}-secondary-500: ${n[500]}; + --${i}-secondary-600: ${n[600]}; + --${i}-secondary-700: ${n[700]}; + --${i}-secondary-800: ${n[800]}; + --${i}-secondary-900: ${n[900]}; + + --${i}-background-50: ${p[50]}; + --${i}-background-100: ${p[100]}; + --${i}-background-200: ${p[200]}; + --${i}-background-300: ${p[300]}; + --${i}-background-400: ${p[400]}; + --${i}-background-500: ${p[500]}; + --${i}-background-600: ${p[600]}; + --${i}-background-700: ${p[700]}; + --${i}-background-800: ${p[800]}; + --${i}-background-900: ${p[900]}; + --${i}-background-1000: ${p[1e3]}; + + --${i}-background: ${r.background}; + --${i}-text: ${r.text}; + --${i}-border: ${r.border}; + + --${i}-primary_rgb: ${d.primary}; + --${i}-secondary_rgb: ${d.secondary}; + --${i}-background_rgb: ${d.background}; + --${i}-text_rgb: ${d.text}; + --${i}-border_rgb: ${d.border}; + `}function e(i){const a=i==="light"?"dark":"light";return` + --semantic-stroke-default: var(--${i}-border); + --semantic-text-default: var(--${i}-text); + --semantic-text-inverted: var(--${a}-text); + --semantic-background-default: var(--${i}-background-500); + --semantic-background-inverted: var(--${a}-background-500); + --semantic-stroke-highlight: var(--${i}-primary-500); + --semantic-text-highlight: var(--${i}-primary-500); + --semantic-background-highlight: var(--${i}-primary-500); + + --semantic-stroke-default_rgb: var(--${i}-border_rgb); + --semantic-text-default_rgb: var(--${i}-text_rgb); + --semantic-text-inverted_rgb: var(--${a}-text_rgb); + --semantic-background-default_rgb: var(--${i}-background_rgb); + --semantic-background-inverted_rgb: var(--${a}-background_rgb); + --semantic-stroke-highlight_rgb: var(--${i}-primary_rgb); + --semantic-text-highlight_rgb: var(--${i}-primary_rgb); + --semantic-background-highlight_rgb: var(--${i}-primary_rgb); + + --semantic-background-alternate: ${i==="dark"?`var(--${i}-background-300)`:`var(--${i}-background-700)`}; + + --semantic-text-hover: ${i==="dark"?`var(--${i}-primary-100)`:`var(--${i}-primary-900)`}; + + --semantic-stroke-hover: ${i==="dark"?`var(--${i}-primary-100)`:`var(--${i}-primary-900)`}; + + + --semantic-stroke-light: ${i==="dark"?`var(--${i}-background-200)`:`var(--${i}-background-800)`}; + + --semantic-background-hover: ${i==="dark"?`var(--${i}-primary-100)`:`var(--${i}-primary-900)`}; + + --semantic-text-hover_rgb: ${i==="dark"?`var(--${i}-primary-100_rgb)`:`var(--${i}-primary-900_rgb)`}; + + --semantic-stroke-hover_rgb: ${i==="dark"?`var(--${i}-primary-100_rgb)`:`var(--${i}-primary-900_rgb)`}; + + --semantic-background-hover_rgb: ${i==="dark"?`var(--${i}-primary-100_rgb)`:`var(--${i}-primary-900_rgb)`}; + + + `}return` + :host { + ${t("light")} + ${t("dark")} + } + + @media (prefers-color-scheme: dark) { + :host([theme='${E.AUTO}']) { + ${e("dark")} + } + } + + @media (prefers-color-scheme: light) { + :host([theme='${E.AUTO}']) { + ${e("light")} + } + } + + :host([theme='${E.LIGHT}']) { + ${e("light")} + } + + :host([theme='${E.DARK}']) { + ${e("dark")} + } + `}class At extends HTMLElement{constructor(){super(),this.styleElement=void 0,this.defaultStyles={fontSizeTitle:"4.25rem",fontSizeXxl:"2rem",fontSizeXl:"1.75rem",fontSizeLg:"1.5rem",fontSizeMd:"1.125rem",fontSizeSm:"0.975rem",fontSizeXs:"0.85rem",fontSizeDefault:"1rem",fontFamilyDefault:"sans-serif",fontFamilyHeading:"arial",colorPrimary:"#ed1c24",colorTextLight:"#000000",colorTextDark:"#ffffff",colorBackgroundLight:"#ffffff",colorBackgroundDark:"#000000",cardMediaSizeSmall:"24px",cardMediaSizeMedium:"64px",cardMediaSizeLarge:"128px",appBarHeight:"64px",bottomNavigationHeight:"72px"},this.shadow=this.attachShadow({mode:"open"});const t=document.createElement("slot");this.shadow.append(t),this.updateStyles()}static get observedAttributes(){return["font-family-heading","font-family-default","font-size-title","font-size-xxl","font-size-xl","font-size-lg","font-size-md","font-size-sm","font-size-default","color-primary","color-text-dark","color-background-dark","color-text-light","color-background-light","card-media-size-sm","card-media-size-md","card-media-size-lg","app-bar-height","bottom-navigation-height"]}attributeChangedCallback(){this.updateStyles()}updateStyles(){const t=this.getAttribute("font-size-title")||this.defaultStyles.fontSizeTitle,e=this.getAttribute("font-size-xxl")||this.defaultStyles.fontSizeXxl,i=this.getAttribute("font-size-xl")||this.defaultStyles.fontSizeXl,a=this.getAttribute("font-size-lg")||this.defaultStyles.fontSizeLg,n=this.getAttribute("font-size-md")||this.defaultStyles.fontSizeMd,r=this.getAttribute("font-size-sm")||this.defaultStyles.fontSizeSm,d=this.getAttribute("font-size-xs")||this.defaultStyles.fontSizeXs,p=this.getAttribute("font-size-default")||this.defaultStyles.fontSizeDefault,b=this.getAttribute("font-family-default")||this.defaultStyles.fontFamilyDefault,z=this.getAttribute("font-family-heading")||this.defaultStyles.fontFamilyHeading,H=this.getAttribute("color-primary")||this.defaultStyles.colorPrimary,P=this.getAttribute("color-text-light")||this.defaultStyles.colorTextLight,I=this.getAttribute("color-text-dark")||this.defaultStyles.colorTextDark,ht=this.getAttribute("color-background-light")||this.defaultStyles.colorBackgroundLight,ut=this.getAttribute("color-background-dark")||this.defaultStyles.colorBackgroundDark,pt=this.getAttribute("card-media-size-lg")||this.defaultStyles.cardMediaSizeLarge,gt=this.getAttribute("card-media-size-md")||this.defaultStyles.cardMediaSizeMedium,mt=this.getAttribute("card-media-size-sm")||this.defaultStyles.cardMediaSizeSmall,bt=this.getAttribute("app-bar-height")||this.defaultStyles.appBarHeight,ft=this.getAttribute("bottom-navigation-height")||this.defaultStyles.bottomNavigationHeight,xt=Et(H,P,ht,I,ut),vt=$t(xt);this.styleElement&&this.shadow.removeChild(this.styleElement),this.styleElement=document.createElement("style"),this.styleElement.textContent=` + :host { + display: flex; + margin: 0; + padding: 0; + box-sizing: border-box; + height: 100%; + width: 100%; + + --${l()}-shadow-light: 0 2px 4px rgba(0,0,0,0.05); + --${l()}-shadow-dark: 0 2px 4px rgba(0,0,0,0.3); + + --${l()}-font-family-default: ${b}; + --${l()}-font-family-heading: ${z}; + --${l()}-font-size-default: ${p}; + --${l()}-font-size-title: ${t}; + --${l()}-font-size-xxl: ${e}; + --${l()}-font-size-xl: ${i}; + --${l()}-font-size-lg: ${a}; + --${l()}-font-size-md: ${n}; + --${l()}-font-size-sm: ${r}; + --${l()}-font-size-xs: ${d}; + + --${l()}-border-xs: 4px; + --${l()}-border-sm: 15px; + + /* Spacing Variables */ + --${l()}-spacing-xs: 4px; + --${l()}-spacing-sm: 8px; + --${l()}-spacing-md: 16px; + --${l()}-spacing-lg: 20px; + --${l()}-spacing-xl: 24px; + --${l()}-spacing-2xl: 28px; + --${l()}-spacing-3xl: 32px; + --${l()}-spacing-4xl: 48px; + --${l()}-spacing-5xl: 56px; + + /* Media Sizes */ + --${l()}-card-media-size-sm: ${mt}; + --${l()}-card-media-size-md: ${gt}; + --${l()}-card-media-size-lg: ${pt}; + + --${l()}-app-bar-height: ${bt}; + --${l()}-bottom-navigation-height: ${ft}; + } + + @media (min-width: ${k.MD}px) { + :host { + /* Desktop Spacing Variables in rem */ + --${l()}-spacing-xs: 8px; + --${l()}-spacing-sm: 16px; + --${l()}-spacing-md: 24px; + --${l()}-spacing-lg: 32px; + --${l()}-spacing-xl: 40px; + --${l()}-spacing-2xl: 48px; + --${l()}-spacing-3xl: 56px; + --${l()}-spacing-4xl: 64px; + --${l()}-spacing-5xl: 72px; + } + } + + ${vt} + `,this.shadow.appendChild(this.styleElement)}}c("theme",At);async function Ct(){return window.matchMedia("(display-mode: standalone)").matches||"standalone"in window.navigator&&window.navigator.standalone?!0:"getInstalledRelatedApps"in navigator&&typeof navigator.getInstalledRelatedApps=="function"?(await navigator.getInstalledRelatedApps()).length>0:!1}class St extends HTMLElement{constructor(){super(),this.installPromptEvent=null;const t=this.attachShadow({mode:"open"}),e=document.createElement("style");(async()=>{if(await Ct())return;e.textContent=` + :host { + display: block; + background-color: var(--semantic-background-default); + color: var(--semantic-text-default); + font-family: ${o("font-family-default")}; + width: 100%; + height: 100%; + box-sizing: border-box; + } + `,t.appendChild(e);const i=document.createElement("slot");t.appendChild(i);const a=document.querySelector(`${l()}-container`);a&&(a.style.display="none");const n=this.querySelector("#install");window.addEventListener("beforeinstallprompt",d=>{d.preventDefault(),this.installPromptEvent=d,n&&(n.style.display="block",n.addEventListener("click",p=>{p.stopPropagation(),this.installPromptEvent&&(this.installPromptEvent.prompt(),this.installPromptEvent.userChoice.then(b=>{if(b.outcome==="accepted")console.log("User accepted the A2HS prompt"),this.showAppContainer();else{console.log("User dismissed the A2HS prompt"),window.location.reload();return}this.installPromptEvent=null,this.showAppContainer()}))}))});const r=this.querySelector("#no-install");r&&r.addEventListener("click",()=>{this.showAppContainer()})})()}showAppContainer(){const t=document.querySelector(`${l()}-container`);if(t)t.style.display="block",this.style.display="none";else throw new Error("No app container found")}}c("install",St);var f=(s=>(s[s.OVERLAY=9999]="OVERLAY",s[s.SNACKBAR=8888]="SNACKBAR",s[s.TOP=10]="TOP",s[s.DEFAULT=0]="DEFAULT",s[s.BOTTOM=-10]="BOTTOM",s))(f||{});class Lt extends HTMLElement{constructor(){super();const t=this.attachShadow({mode:"open"}),e=document.createElement("style");e.textContent=` + :host { + display: block; + width: 100%; + position: relative; /* Ensure positioning context for inner divs */ + z-index: ${f.TOP}; + } + + /* Fixed/Sticky bar styles */ + .app-bar { + width: 100%; + background-color: var(--semantic-background-highlight); + color: var(--semantic-text-inverted); + padding: ${o("spacing-sm")}; + box-sizing: border-box; + position: var(--app-bar-position, sticky); + top: 0; + left: 0; + box-shadow: ${o("shadow-dark")}; + transition: top 0.3s ease-in-out; + height: ${o("app-bar-height")}; + display: flex; + align-items: center; + } + + .spacer { + display: none; + height: ${o("app-bar-height")}; + } + + :host([fixed]) .spacer { + display: block; + } + + :host([fixed]) .app-bar { + position: fixed; + z-index: ${f.TOP}; + } + + :host([static]) .app-bar { + position: static; + } + `,t.appendChild(e);const i=document.createElement("div");i.className="spacer";const a=document.createElement("div");a.className="app-bar";const n=document.createElement("slot");a.appendChild(n),t.appendChild(i),t.appendChild(a)}static get observedAttributes(){return["fixed","static"]}}c("app-bar",Lt);class zt extends HTMLElement{constructor(){super();const t=this.attachShadow({mode:"open"}),e=document.createElement("style");e.textContent=` + :host { + align-items: center; + border: 1px solid var(--semantic-stroke-default); + border-radius: ${o("border-sm")}; + display: flex; + justify-content: center; + text-align: center; + text-decoration: none; + text-overflow: ellipsis; + transition: background-color .1s, color .1s, border-color .1s; + white-space: nowrap; + width: max-content; + height: max-content; + } + + :host(:hover), + :host([active]) { + color: var(--semantic-text-inverted); + background-color: var(--semantic-stroke-highlight); + } + + :host([size="small"]) { + font-size: ${o("font-size-sm")}; + padding-block: ${o("spacing-xs")}; + padding-inline: ${o("spacing-sm")}; + } + + :host([size="large"]) { + font-size: ${o("font-size-md")}; + padding-block: ${o("spacing-sm")}; + padding-inline: ${o("spacing-md")}; + } + `,t.appendChild(e),this.chipContent=document.createElement("div"),t.appendChild(this.chipContent),this.updateContent(),this.hasAttribute("size")||this.setAttribute("size","small")}static get observedAttributes(){return["value","active","size"]}attributeChangedCallback(t,e,i){t==="value"&&e!==i?this.updateContent():t==="active"&&e!==i?this.updateActiveState():t==="size"&&e!==i&&this.updateSize()}updateContent(){this.chipContent.textContent=this.value}updateActiveState(){this.active?this.setAttribute("active",""):this.removeAttribute("active")}updateSize(){this.size?this.setAttribute("size",this.size):this.removeAttribute("size")}set active(t){t?this.setAttribute("active",""):this.removeAttribute("active")}get active(){return this.hasAttribute("active")}set value(t){this.setAttribute("value",t)}get value(){return this.getAttribute("value")||""}set size(t){this.setAttribute("size",t)}get size(){return this.getAttribute("size")||"small"}}c("chip",zt);class Q extends Error{constructor(t,e){super(`${t.tagName.toLowerCase()} can only have the following direct children: ${e.join(", ")}`)}}class Tt extends HTMLElement{constructor(){super();const t=this.attachShadow({mode:"open"}),e=document.createElement("style");e.textContent=` + :host { + width: 100%; + } + + :host table { + width: 100%; + border: 0; + border-spacing: 0; + } + + :host table th { + border-bottom: 2px solid rgba(var(--semantic-stroke-highlight_rgb), 0.4); + color: var(--semantic-text-default); + } + + :host table th, :host table td { + text-align: left; + border-collapse: collapse; + padding: ${o("spacing-xs")}; + border-right: 1px solid var(--semantic-stroke-default); + color: var(--semantic-text-default); + } + + :host table > tbody > tr > td { + border-bottom: 1px solid var(--semantic-stroke-default); + color: var(--semantic-text-default); + } + + :host table tbody > tr:hover { + background-color: rgba(var(--semantic-stroke-highlight_rgb), 0.05); + } + + :host table tr:last-child td { + border-bottom: 0; + } + + :host table tr td:last-child, table tr th:last-child { + border-right: 0; + } + `,this.setAttribute("stretch-horizontal",""),t.appendChild(e);const i=this.querySelector("table");if(!i)throw new Q(this,["table"]);t.appendChild(i)}}c("table",Tt);const tt=class $ extends HTMLElement{constructor(){super(),this.isTooltipVisible=!1,this.repositionScheduled=!1;const t=this.attachShadow({mode:"open"});this.tooltip=document.createElement("div"),this.tooltip.classList.add("tooltip");const e=document.createElement("style");e.textContent=` + .tooltip { + position: absolute; + background-color: rgba(var(--semantic-background-inverted_rgb), 0.9); + color: var(--semantic-text-inverted); + padding: ${o("spacing-sm")}; + border-radius: ${o("border-xs")}; + font-size: ${o("font-size-small")}; + z-index: ${f.OVERLAY}; + white-space: nowrap; + visibility: hidden; + opacity: 0; + transition: opacity 0.2s ease-in-out; + pointer-events: none; + transform: translateY(-100%); + } + + .tooltip[visible="true"] { + visibility: visible; + opacity: 1; + } + `,t.append(e,this.tooltip);const i=document.createElement("slot");t.appendChild(i),this.addEventListener("mouseenter",this.showTooltip.bind(this)),this.addEventListener("mouseleave",this.hideTooltip.bind(this)),this.addEventListener("touchstart",this.toggleTooltip.bind(this)),document.addEventListener("click",this.handleOutsideClick.bind(this)),window.addEventListener("scroll",this.scheduleReposition.bind(this))}connectedCallback(){this.tooltip.textContent=this.getAttribute("text")||"Tooltip content"}disconnectedCallback(){document.removeEventListener("click",this.handleOutsideClick.bind(this)),window.removeEventListener("scroll",this.scheduleReposition.bind(this))}showTooltip(){this.isTooltipVisible||($.activeTooltips.forEach(t=>{t!==this&&t.isTooltipVisible&&t.hideTooltip()}),$.activeTooltips.push(this),this.tooltip.textContent=this.getAttribute("text")||"Tooltip content",this.repositionTooltip(),this.tooltip.setAttribute("visible","true"),this.isTooltipVisible=!0,this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=window.setTimeout(()=>this.hideTooltip(),3e3))}hideTooltip(){this.tooltip.removeAttribute("visible"),this.isTooltipVisible=!1;const t=$.activeTooltips.indexOf(this);t!==-1&&$.activeTooltips.splice(t,1),clearTimeout(this.touchTimeout)}toggleTooltip(t){t.preventDefault(),this.isTooltipVisible?this.hideTooltip():this.showTooltip()}handleOutsideClick(t){this.contains(t.target)||this.hideTooltip()}scheduleReposition(){this.repositionScheduled||(this.repositionScheduled=!0,requestAnimationFrame(()=>{this.repositionTooltip(),this.repositionScheduled=!1}))}repositionTooltip(){if(!this.isTooltipVisible)return;const t=this.getBoundingClientRect(),e=this.tooltip.getBoundingClientRect(),i=this.closest("div[style*='overflow']")||document.documentElement,a=i.getBoundingClientRect(),n=i.scrollTop,r=i.scrollLeft;let d=t.top+n-a.top-e.height-8,p=t.left+r-a.left+(t.width-e.width)/2;da.width+r&&(p=t.left+r-a.left-e.width-8),d+e.height>a.height+n&&(d=t.top+n-a.top-e.height-8),this.tooltip.style.left=`${p}px`,this.tooltip.style.top=`${d}px`}};tt.activeTooltips=[];let Mt=tt;c("tooltip",Mt);function y(){return` + :host([stretch-vertical]) { + height: 100%; + } + + :host([stretch-horizontal]) { + width: 100%; + } + `}class j extends HTMLElement{constructor(){super();const t=this.attachShadow({mode:"open"}),e=document.createElement("style");e.textContent=` + :host { + display: flex; + flex-direction: column; + width: max-content; + } + + ${y()} + + :host .container { + position: relative; + display: flex; + height: 2em; + overflow: hidden; + } + + :host .container::after { + --icon-offset: 6px; + content: '\\25BC'; + position: absolute; + top: 0; + right: 0; + padding: var(--icon-offset); + background: rgba(var(--semantic-background-inverted_rgb), 0.1); + transition: .25s all ease; + pointer-events: none; + } + + :host .container:hover::after { + color: var(--semantic-text-highlight); + } + + :host select>option { + background: var(--semantic-background-default); + } + + :host select { + --select-offset: calc(${o("spacing-sm")} + 26px); + /* Reset Select */ + appearance: none; + outline: 10px red; + border: 0; + box-shadow: none; + width: 100%; + font-size: 1em; + + /* Personalize */ + flex: 1; + padding-inline: ${o("spacing-md")}; + padding-block: 0; + color: var(--text-default); + background: rgba(var(--semantic-background-inverted_rgb), 0.1); + background-image: none; + cursor: pointer; + + padding-right: var(--select-offset); + } + `,this.select=this.querySelector("select");const i=document.createElement("div");if(i.classList.add("container"),!this.select)throw new Q(this,["select"]);i.append(this.select),t.append(e,i),this.select.addEventListener("change",()=>{this.dispatchSelectChange()})}dispatchSelectChange(){const t=new CustomEvent("select-change",{detail:{value:this.select.value},bubbles:!0,composed:!0});this.dispatchEvent(t)}static get observedAttributes(){return["selected"]}attributeChangedCallback(t,e,i){j.observedAttributes.includes(t)&&e!==i&&t==="selected"&&(this.select.value=i||"",this.dispatchSelectChange())}}c("select",j);class et extends HTMLElement{constructor(){super();const t=this.attachShadow({mode:"open"}),e=document.createElement("style");e.textContent=` + :host { + display: flex; + flex-direction: column; + padding: ${o("spacing-sm")}; + flex: 1; + } + `,t.appendChild(e);const i=document.createElement("slot");t.appendChild(i)}}c("card-content",et);class Ht extends HTMLElement{constructor(){super();const t=this.attachShadow({mode:"open"}),e=document.createElement("style");e.textContent=` + :host { + box-sizing: border-box; + border: 1px solid var(--semantic-stroke-default); + display: flex; + flex-direction: column; + overflow: hidden; + max-width: 100%; + box-shadow: ${o("shadow-light")}; + height: 100%; /* Ensure the card takes full height */ + } + + card-content { + flex: 1; /* Allows the content to grow and fill space */ + } + + card-media { + display: block; + width: 100%; + } + `,t.appendChild(e),this.querySelector("x-");const i=this.querySelector(`${l()}-card-content`)||this.querySelector(`${l()}-card-media`)||this.querySelector(`${l()}-card-footer`),a=document.createElement("slot");if(i)t.appendChild(a);else{const n=new et;n.append(a),t.append(n)}}}c("card",Ht);class q extends HTMLElement{constructor(){super();const t=this.attachShadow({mode:"open"});this.styleElement=document.createElement("style"),this.styleElement.textContent=` + :host { + display: block; + width: 100%; + position: relative; + overflow: hidden; + } + + img, video { + width: 100%; + height: 100%; + object-fit: cover; + } + + .small { + height: ${o("card-media-size-sm")}; + } + .medium { + height: ${o("card-media-size-md")}; + } + .large { + height: ${o("card-media-size-lg")}; + } + `,t.appendChild(this.styleElement),this.mediaElement=document.createElement("div"),this.mediaElement.style.position="relative",this.mediaElement.style.width="100%",this.mediaElement.style.height="100%",this.mediaElement.style.display="flex",t.appendChild(this.mediaElement)}static get observedAttributes(){return["src","size"]}attributeChangedCallback(t,e,i){e!==i&&q.observedAttributes.includes(t)&&this.updateMedia()}updateMedia(){const t=this.getAttribute("src"),e=this.getAttribute("size")||void 0,i=this.detectMediaType(t);if(t&&i){this.mediaElement.innerHTML="";const a=i==="image"?document.createElement("img"):document.createElement("video");if(a.src=t,e&&(a.className=e),i==="video"){const n=a;n.muted=!0,n.controls=!1,n.autoplay=!0,n.loop=!0,n.playsInline=!0,this.mediaElement.appendChild(n)}else this.mediaElement.appendChild(a)}}detectMediaType(t){var e;if(!t)return null;const i=(e=t.split(".").pop())==null?void 0:e.toLowerCase();if(i){const a=["jpg","jpeg","png","gif","bmp","webp"],n=["mp4","webm","ogg"];if(a.includes(i))return"image";if(n.includes(i))return"video"}return null}get src(){return this.getAttribute("src")}set src(t){t?this.setAttribute("src",t):this.removeAttribute("src")}get size(){return this.getAttribute("size")}set size(t){t?this.setAttribute("size",t):this.removeAttribute("size")}}c("card-media",q);class Pt extends HTMLElement{constructor(){super();const t=this.attachShadow({mode:"open"}),e=document.createElement("style");e.textContent=` + :host { + display: flex; + align-items: center; + justify-content: flex-end; + padding: ${o("spacing-sm")}; + border-top: 1px solid var(--semantic-stroke-default); + background-color: var(--card-footer-background, transparent); + flex-shrink: 0; /* Prevent footer from shrinking */ + } + `,t.appendChild(e);const i=document.createElement("slot");t.appendChild(i)}}c("card-footer",Pt);class It extends HTMLElement{constructor(){super();const t=this.attachShadow({mode:"open"}),e=document.createElement("style");e.textContent=` + :host { + display: inline-block; + width: 50px; + height: 50px; + overflow: hidden; + } + + :host([size="small"]) { + width: 30px; + height: 30px; + } + + :host([size="large"]) { + width: 70px; + height: 70px; + } + + svg { + width: 100%; + height: 100%; + animation: rotate 2s linear infinite; + } + + circle { + fill: none; + stroke-width: 4; + stroke: var(--semantic-stroke-highlight); + stroke-dasharray: 150, 200; + stroke-dashoffset: 0; + animation: dash 1.5s ease-in-out infinite; + } + + @keyframes rotate { + 100% { + transform: rotate(360deg); + } + } + + @keyframes dash { + 0% { + stroke-dasharray: 1, 200; + stroke-dashoffset: 0; + } + 50% { + stroke-dasharray: 100, 200; + stroke-dashoffset: -50; + } + 100% { + stroke-dasharray: 1, 200; + stroke-dashoffset: -150; + } + } + `;const i=document.createElementNS("http://www.w3.org/2000/svg","svg");i.setAttribute("viewBox","0 0 50 50");const a=document.createElementNS("http://www.w3.org/2000/svg","circle");a.setAttribute("cx","25"),a.setAttribute("cy","25"),a.setAttribute("r","20"),i.appendChild(a),t.appendChild(e),t.appendChild(i)}static get observedAttributes(){return["size","color"]}attributeChangedCallback(t,e,i){t==="size"&&e!==i&&this.updateSize(),t==="color"&&e!==i&&this.updateColor()}updateSize(){this.setAttribute("size",this.size)}updateColor(){this.style.setProperty("--spinner-color",this.color)}set size(t){this.setAttribute("size",t)}get size(){return this.getAttribute("size")||"small"}set color(t){this.setAttribute("color",t)}get color(){return this.getAttribute("color")||"#000"}}c("spinner",It);class _t extends HTMLElement{constructor(){super();const t=this.attachShadow({mode:"open"}),e=document.createElement("style");e.textContent=` + ::slotted(a) { + color: var(--semantic-text-highlight); + text-decoration: none; + } + + ::slotted(a:hover) { + color: var(--semantic-text-highlight); + text-decoration: underline; + } + + ::slotted(a:active) { + color: var(--semantic-text-highlight); + text-decoration: none; + } + + ::slotted(a:visited) { + color: var(--semantic-text-highlight); + text-decoration: none; + } + `,t.appendChild(e);const i=document.createElement("slot");t.append(i)}}c("text-link",_t);class Dt extends HTMLElement{constructor(){super();const t=this.attachShadow({mode:"open"}),e=document.createElement("style");e.textContent=` + ::slotted(a) { + color: inherit; + text-decoration: inherit; + font-weight: inherit; + } + + ::slotted(a:hover) { + color: inherit; + text-decoration: inherit; + font-weight: inherit; + } + + ::slotted(a:active) { + color: inherit; + text-decoration: inherit; + font-weight: inherit; + } + + ::slotted(a:visited) { + color: inherit; + text-decoration: inherit; + font-weight: inherit; + } + `,t.appendChild(e);const i=document.createElement("slot");t.append(i)}}c("bare-link",Dt);class S extends HTMLElement{constructor(){super(),this.shadow=this.attachShadow({mode:"open"});const t=document.createElement("style");t.textContent=` + :host { + display: inline; + } + + /* General reset for slotted elements */ + ::slotted(h1), ::slotted(h2), ::slotted(h3), ::slotted(h4), ::slotted(h5), ::slotted(h6), + ::slotted(p) { + margin: 0; + padding: 0; + color: inherit; + text-align: inherit; + } + + :host([display="title"]) ::slotted(*), :host([display="title"]) { + font-family: ${o("font-family-heading")}; + font-size: ${o("font-size-title")}; /* Large font size */ + font-weight: 400; + line-height: 1.2; + letter-spacing: 0em; + } + + /* Heading 1 */ + :host([display="h1"]) ::slotted(*), :host([display="h1"]) { + font-family: ${o("font-family-heading")}; + font-size: ${o("font-size-xxl")}; /* Large font size */ + font-weight: 400; + line-height: 1.167; + letter-spacing: -0.01562em; + } + + /* Heading 2 */ + :host([display="h2"]) ::slotted(*), :host([display="h2"]) { + font-family: ${o("font-family-heading")}; + font-size: ${o("font-size-xl")}; /* Extra-large font size */ + font-weight: 300; + line-height: 1.2; + letter-spacing: -0.00833em; + } + + /* Heading 3 */ + :host([display="h3"]) ::slotted(*), :host([display="h3"]) { + font-family: ${o("font-family-heading")}; + font-size: ${o("font-size-lg")}; /* Large font size */ + font-weight: 400; + line-height: 1.167; + letter-spacing: 0em; + } + + /* Heading 4 */ + :host([display="h4"]) ::slotted(*), :host([display="h4"]) { + font-family: ${o("font-family-heading")}; + font-size: ${o("font-size-md")}; /* Medium font size */ + font-weight: 400; + line-height: 1.235; + letter-spacing: 0.00735em; + } + + /* Heading 5 */ + :host([display="h5"]) ::slotted(*), :host([display="h5"]) { + font-family: ${o("font-family-heading")}; + font-size: ${o("font-size-sm")}; /* Small font size */ + font-weight: 400; + line-height: 1.334; + letter-spacing: 0em; + } + + /* Heading 6 */ + :host([display="h6"]) ::slotted(*), :host([display="h6"]) { + font-family: ${o("font-family-heading")}; + font-size: ${o("font-size-xs")}; /* Small font size */ + font-weight: 500; + line-height: 1.6; + letter-spacing: 0.0075em; + } + + /* Subtitle 1 */ + :host([display="subtitle1"]) ::slotted(*), :host([display="subtitle1"]) { + font-family: ${o("font-family-default")}; + font-size: ${o("font-size-md")}; /* Medium font size */ + font-weight: 400; + line-height: 1.75; + letter-spacing: 0.00938em; + } + + /* Subtitle 2 */ + :host([display="subtitle2"]) ::slotted(*), :host([display="subtitle2"]) { + font-family: ${o("font-family-default")}; + font-size: ${o("font-size-sm")}; /* Small font size */ + font-weight: 500; + line-height: 1.57; + letter-spacing: 0.00714em; + } + + /* Body 1 */ + :host([display="body1"]) ::slotted(*), :host([display="body1"]) { + font-family: ${o("font-family-default")}; + font-size: ${o("font-size-default")}; /* Medium font size */ + font-weight: 400; + line-height: 1.5; + letter-spacing: 0.00938em; + } + + /* Body 2 */ + :host([display="body2"]) ::slotted(*), :host([display="body2"]) { + font-family: ${o("font-family-default")}; + font-size: ${o("font-size-sm")}; /* Small font size */ + font-weight: 400; + line-height: 1.43; + letter-spacing: 0.01071em; + } + + /* Button */ + :host([display="button"]) ::slotted(*), :host([display="button"]) { + font-family: ${o("font-family-default")}; + font-size: ${o("font-size-sm")}; /* Small font size */ + font-weight: 500; + line-height: 1.75; + letter-spacing: 0.02857em; + text-transform: uppercase; + } + + /* Caption */ + :host([display="caption"]) ::slotted(*), :host([display="caption"]) { + font-family: ${o("font-family-default")}; + font-size: ${o("font-size-sm")}; /* Extra-small font size */ + font-weight: 400; + line-height: 1.66; + letter-spacing: 0.03333em; + } + + /* Overline */ + :host([display="overline"]) ::slotted(*), :host([display="overline"]) { + font-family: ${o("font-family-default")}; + font-size: ${o("font-size-xs")}; /* Extra-small font size */ + font-weight: 400; + line-height: 2.66; + letter-spacing: 0.08333em; + text-transform: uppercase; + } + `,this.shadow.appendChild(t);const e=document.createElement("slot");this.shadow.appendChild(e)}set display(t){this.setAttribute("display",t)}get display(){return this.getAttribute("display")||""}static get observedAttributes(){return["display"]}}c("typography",S);class Bt extends HTMLElement{constructor(){super();const t=this.attachShadow({mode:"open"}),e=document.createElement("style");e.textContent=` + :host { + display: block; + background-color: var(--semantic-background-default); + color: var(--semantic-text-default); + font-family: ${o("font-family-default")}; + width: 100%; + } + `,t.appendChild(e);const i=document.createElement("slot");t.append(i)}}c("container",Bt);class R extends HTMLElement{constructor(){super();const t=this.attachShadow({mode:"open"});this.styleElement=document.createElement("style"),t.appendChild(this.styleElement);const e=document.createElement("slot");t.append(e),this.updateStyles()}static get observedAttributes(){return["xs","md","lg","xl"]}attributeChangedCallback(t,e,i){R.observedAttributes.includes(t)&&e!==i&&this.updateStyles()}updateStyles(){const t=this.getAttribute("xs")||"1",e=this.getAttribute("md")||"1",i=this.getAttribute("lg")||"1",a=this.getAttribute("xl")||"1";this.styleElement.textContent=` + :host { + width: 100%; + display: grid; + gap: ${o("spacing-md")}; + grid-template-columns: repeat(${t}, 1fr); + } + + @media (min-width: ${k.XS}px) { + :host([xs]) { + grid-template-columns: repeat(${t}, 1fr); + } + } + + @media (min-width: ${k.MD}px) { + :host([md]) { + grid-template-columns: repeat(${e}, 1fr); + } + } + + @media (min-width: ${k.LG}px) { + :host([lg]) { + grid-template-columns: repeat(${i}, 1fr); + } + } + + @media (min-width: ${k.XL}px) { + :host([xl]) { + grid-template-columns: repeat(${a}, 1fr); + } + } + `}get xs(){return this.getAttribute("xs")}set xs(t){t?this.setAttribute("xs",t):this.removeAttribute("xs")}get md(){return this.getAttribute("md")}set md(t){t?this.setAttribute("md",t):this.removeAttribute("md")}get lg(){return this.getAttribute("lg")}set lg(t){t?this.setAttribute("lg",t):this.removeAttribute("lg")}get xl(){return this.getAttribute("xl")}set xl(t){t?this.setAttribute("xl",t):this.removeAttribute("xl")}}c("grid",R);function Gt(s,t){return Object.keys(s).filter(e=>isNaN(Number(e))).map(e=>t(s[e]))}var it=(s=>(s.CENTER="center",s.LEFT="start",s.RIGHT="end",s.EVEN="space-evenly",s.BETWEEN="space-between",s))(it||{});function st(){return` + ${Gt(it,s=>` + :host([justify-content="${s}"]) { + justify-content: ${s}; + } + + :host([align-items="${s}"]) { + align-items: ${s}; + } + `).join("")} + `}class V extends HTMLElement{constructor(){super();const t=this.attachShadow({mode:"open"});this.styleElement=document.createElement("style"),t.appendChild(this.styleElement);const e=document.createElement("slot");t.append(e),this.setAttribute("stretch-horizontal",""),this.updateStyles()}static get observedAttributes(){return["direction","gap","margin-inline","margin-block","stretch"]}attributeChangedCallback(t,e,i){V.observedAttributes.includes(t)&&e!==i&&this.updateStyles()}updateStyles(){const t=this.getAttribute("direction")||"vertical",e=this.getGapVariable(this.getAttribute("gap")||"none"),i=this.getMarginVariable(this.getAttribute("margin-inline")||"none"),a=this.getMarginVariable(this.getAttribute("margin-block")||"none");this.styleElement.textContent=` + :host { + display: flex; + flex-direction: ${t==="horizontal"?"row":"column"}; + gap: ${e}; + padding-inline: ${i}; + padding-block: ${a}; + flex-wrap: wrap; + box-sizing: border-box; + } + + ${st()} + ${y()} + + :host([stretch][direction="horizontal"]) { + width: 100%; + } + + :host([stretch][direction="vertical"]) { + height: 100%; + } + `}getGapVariable(t){switch(t){case"none":return"0px";case"small":return o("spacing-sm");case"medium":return o("spacing-md");case"large":return o("spacing-lg");case"extra-large":return o("spacing-xl");default:return o("spacing-md")}}getMarginVariable(t){return this.getGapVariable(t)}get direction(){return this.getAttribute("direction")}set direction(t){t?this.setAttribute("direction",t):this.removeAttribute("direction")}get gap(){return this.getAttribute("gap")||"none"}set gap(t){t?this.setAttribute("gap",t):this.removeAttribute("gap")}get marginInline(){return this.getAttribute("margin-inline")||"none"}set marginInline(t){t?this.setAttribute("margin-inline",t):this.removeAttribute("margin-inline")}get marginBlock(){return this.getAttribute("margin-block")||"none"}set marginBlock(t){t?this.setAttribute("margin-block",t):this.removeAttribute("margin-block")}}c("stack",V);class O extends HTMLElement{constructor(){super();const t=this.attachShadow({mode:"open"}),e=document.createElement("style");e.textContent=` + :host { + display: block; + overflow: auto; + } + + ${y()} + `,t.appendChild(e);const i=document.createElement("slot");t.append(i)}static get observedAttributes(){return["stretch","height","width"]}connectedCallback(){this.hasAttribute("height")&&(this.style.height=this.getAttribute("height")||"auto"),this.hasAttribute("width")&&(this.style.width=this.getAttribute("width")||"auto")}attributeChangedCallback(t,e,i){!O.observedAttributes.includes(t)||e===i||(t==="height"&&(this.style.height=i||"auto"),t==="width"&&(this.style.width=i||"auto"))}}c("scroll-box",O);class Nt extends HTMLElement{constructor(){super(),this.shadow=this.attachShadow({mode:"open"});const t=document.createElement("style");t.textContent=` + :host { + display: inline-block; + overflow: hidden; + position: relative; + box-sizing: border-box; + } + + ::slotted(img) { + display: block; + object-fit: contain; /* Maintain aspect ratio while fitting within bounds */ + object-position: center; /* Center the image if there are empty spaces */ + max-width: 100%; + } + + :host([size="small"]) ::slotted(img) { + width: 128px; + height: auto; + } + + :host([size="medium"]) ::slotted(img) { + width: 256px; + height: auto; + } + + :host([size="large"]) ::slotted(img) { + width: 512px; + height: auto; + } + + :host([size="none"]) ::slotted(img) { + width: 100%; + height: 100%; + } + `,this.shadow.appendChild(t);const e=document.createElement("slot");this.shadow.appendChild(e)}static get observedAttributes(){return["size","width","height"]}attributeChangedCallback(t,e,i){e!==i&&["size","width","height"].includes(t)&&this.updateImageSize()}updateImageSize(){const t=this.querySelector("img"),e=this.getAttribute("width")||void 0,i=this.getAttribute("height")||void 0;e&&(t.style.width=e),i&&(t.style.height=i)}}c("figure",Nt);class jt extends HTMLElement{constructor(){super();const t=document.createElement("style");t.textContent=` + :host { + display: flex; + flex-wrap: wrap; + } + + ${y()} + `;const e=this.attachShadow({mode:"open"});e.appendChild(t);const i=document.createElement("slot");e.appendChild(i)}}c("block",jt);class qt extends HTMLElement{constructor(){super();const t=this.attachShadow({mode:"open"});this.button=document.createElement("button"),this.button.classList.add("button");const e=document.createElement("style");e.textContent=` + :host { + width: max-content; + height: max-content; + } + + .button { + border: none; + border-radius: ${o("border-xs")}; + cursor: pointer; + display: inline-flex; + align-items: center; + justify-content: center; + padding: ${o("spacing-md")}; + text-align: center; + transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1), box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1), border-color 250ms cubic-bezier(0.4, 0, 0.2, 1), color 250ms cubic-bezier(0.4, 0, 0.2, 1); + white-space: nowrap; + touch-action: manipulation; /* Helps with touch interactions */ + } + + ${y()} + + :host .button { + width: 100%; + } + + :host([variant="filled"]) .button { + background-color: var(--semantic-background-highlight); + color: var(--semantic-text-inverted); + } + + :host([variant="filled"]:hover) .button, + :host([variant="filled"]:active) .button { + background-color: var(--semantic-background-hover); + color: var(--semantic-text-inverted); + box-shadow: ${o("shadow-light")}; + } + + :host([variant="outlined"]) .button { + background-color: transparent; + border: 1px solid var(--semantic-stroke-highlight); + color: var(--semantic-text-highlight); + } + + :host([variant="outlined"]:hover) .button, + :host([variant="outlined"]:active) .button { + border-color: var(--semantic-stroke-hover); + color: var(--semantic-text-hover); + background-color: rgba(var(--semantic-background-highlight_rgb), 0.1); + } + + :host([size="small"]) .button { + padding-block: ${o("spacing-xs")}; + padding-inline: ${o("spacing-sm")}; + } + + :host([size="medium"]) .button { + padding-block: ${o("spacing-sm")}; + padding-inline: ${o("spacing-md")}; + } + + :host([size="large"]) .button { + padding-block: ${o("spacing-md")}; + padding-inline: ${o("spacing-lg")}; + } + + .button:focus { + outline: 2px solid var(--button-focus-outline); + } + `,t.appendChild(e);const i=new S;i.display="button";const a=document.createElement("slot");i.append(a),this.button.appendChild(i),t.appendChild(this.button),this.hasAttribute("variant")||this.setAttribute("variant","filled"),this.hasAttribute("size")||this.setAttribute("size","medium"),this.button.addEventListener("touchstart",this.handleTouchStart.bind(this),{passive:!0}),this.button.addEventListener("touchend",this.handleTouchEnd.bind(this),{passive:!0}),this.button.addEventListener("touchcancel",this.handleTouchEnd.bind(this),{passive:!0})}handleTouchStart(){this.button.classList.add("button-active")}handleTouchEnd(){this.button.classList.remove("button-active")}static get observedAttributes(){return["variant","size","stretch"]}attributeChangedCallback(t,e,i){t==="variant"&&e!==i?this.updateVariant():t==="size"&&e!==i&&this.updateSize()}updateVariant(){this.setAttribute("variant",this.variant)}updateSize(){this.setAttribute("size",this.size)}set variant(t){this.setAttribute("variant",t)}get variant(){return this.getAttribute("variant")||"filled"}set size(t){this.setAttribute("size",t)}get size(){return this.getAttribute("size")||"medium"}}c("button",qt);class at extends HTMLElement{constructor(){super();const t=this.attachShadow({mode:"open"}),e=document.createElement("style");e.textContent=` + :host { + display: inline-flex; + align-items: flex-start; + } + + .toggle-switch { + width: 42px; + height: 24px; + background-color: var(--semantic-stroke-default); + border-radius: 12px; + position: relative; + transition: background-color 0.2s; + flex-shrink: 0; + cursor: pointer; + } + + .switch-knob { + width: 20px; + height: 20px; + background-color: var(--semantic-background-default); + border-radius: ${o("border-sm")}; + position: absolute; + top: 2px; + left: 2px; + transition: left 0.2s; + } + + :host([checked]) .toggle-switch { + background-color: var(--semantic-stroke-highlight); + } + + :host([checked]) .switch-knob { + left: 20px; + } + + :host([disabled]) .toggle-switch { + cursor: not-allowed; + opacity: 0.6; + } + + input { + display: none; + } + + .label { + margin-left: ${o("spacing-sm")}; + cursor: auto; + } + + .required-asterisk::after { + content: " *"; + color: red; /* Optional: To highlight the asterisk */ + } + `,t.appendChild(e),this.inputElement=document.createElement("input"),this.inputElement.type="checkbox",t.appendChild(this.inputElement),this.toggleSwitch=document.createElement("div"),this.toggleSwitch.classList.add("toggle-switch"),t.appendChild(this.toggleSwitch),this.switchKnob=document.createElement("div"),this.switchKnob.classList.add("switch-knob"),this.toggleSwitch.appendChild(this.switchKnob),this.labelElement=new S,this.labelElement.display="body1",this.labelElement.classList.add("label"),t.appendChild(this.labelElement),this.toggleSwitch.addEventListener("click",()=>{this.disabled||(this.checked=!this.checked,this.dispatchEvent(new Event("change")))}),this.hasAttribute("checked")||(this.checked=!1),this.hasAttribute("disabled")||(this.disabled=!1),this.updateLabel()}static get observedAttributes(){return["checked","disabled","name","value","required","label"]}attributeChangedCallback(t,e,i){t==="checked"&&e!==i?this.updateCheckedState():t==="disabled"&&e!==i?this.updateDisabledState():t==="name"&&e!==i?this.inputElement.name=i||"":t==="value"&&e!==i?this.inputElement.value=i||"":t==="required"&&e!==i?(this.inputElement.required=i!==null,this.updateLabel()):t==="label"&&e!==i&&this.updateLabel()}updateCheckedState(){this.inputElement.checked=this.checked,this.checked?this.setAttribute("checked",""):this.removeAttribute("checked")}updateDisabledState(){this.inputElement.disabled=this.disabled,this.disabled?this.setAttribute("disabled",""):this.removeAttribute("disabled")}updateLabel(){this.labelElement.textContent=this.label,this.required?this.labelElement.classList.add("required-asterisk"):this.labelElement.classList.remove("required-asterisk")}set checked(t){t?this.setAttribute("checked",""):this.removeAttribute("checked")}get checked(){return this.hasAttribute("checked")}set disabled(t){t?this.setAttribute("disabled",""):this.removeAttribute("disabled")}get disabled(){return this.hasAttribute("disabled")}set name(t){this.setAttribute("name",t)}get name(){return this.getAttribute("name")||""}set value(t){this.setAttribute("value",t)}get value(){return this.getAttribute("value")||""}set required(t){t?this.setAttribute("required",""):this.removeAttribute("required")}get required(){return this.hasAttribute("required")}set label(t){this.setAttribute("label",t)}get label(){return this.getAttribute("label")||""}get form(){return this.inputElement.form}get validity(){return this.inputElement.validity}get validationMessage(){return this.inputElement.validationMessage}checkValidity(){return this.inputElement.checkValidity()}reportValidity(){return this.inputElement.reportValidity()}focus(){this.inputElement.focus()}}c("switch",at);class Rt extends HTMLElement{constructor(){super();const t=this.attachShadow({mode:"open"}),e=document.createElement("style");e.textContent=` + :host { + display: inline; + width: max-content; + position: relative; + } + + .content-wrapper { + display: inline-block; + position: relative; + } + + .badge { + position: absolute; + top: 0; + right: 0; + background-color: var(--semantic-background-highlight); + color: var(--semantic-text-inverted); + border-radius: 15px; + padding: 0 6px; + height: 20px; + display: flex; + align-items: center; + justify-content: center; + font-size: 0.75rem; + font-weight: bold; + transform: translate(75%, -50%); + z-index: 1; + } + + :host([hidden]) .badge { + display: none; + } + `,t.appendChild(e),this.contentWrapper=document.createElement("div"),this.contentWrapper.className="content-wrapper",t.appendChild(this.contentWrapper);const i=document.createElement("slot");this.contentWrapper.appendChild(i),this.badgeElement=document.createElement("span"),this.badgeElement.className="badge",t.appendChild(this.badgeElement),this.updateBadge()}static get observedAttributes(){return["content","hidden"]}attributeChangedCallback(t,e,i){t==="content"&&e!==i?this.updateBadge():t==="hidden"&&e!==i&&this.updateVisibility()}updateBadge(){this.badgeElement.textContent=this.getAttribute("content")||""}updateVisibility(){const t=this.hasAttribute("hidden");this.badgeElement.style.display=t?"none":"flex"}set content(t){this.setAttribute("content",t)}get content(){return this.getAttribute("content")||""}set hidden(t){t?this.setAttribute("hidden",""):this.removeAttribute("hidden")}get hidden(){return this.hasAttribute("hidden")}}c("badge",Rt);class Vt extends HTMLElement{constructor(){super();const t=this.attachShadow({mode:"open"}),e=document.createElement("style");e.textContent=` + :host { + display: inline-flex; + align-items: center; + gap: ${o("spacing-sm")}; + font-family: sans-serif; + width: max-content; + } + + .color-container { + position: relative; + } + + .color-preview { + width: 24px; + height: 24px; + border-radius: 50%; + border: 2px solid #ccc; + background-color: #ffffff; + box-shadow: 0 0 3px rgba(var(--semantic-background-inverted_rgb), 0.2); + cursor: pointer; + } + + .icon { + position: absolute; + bottom: 0; + right: 0; + width: 16px; /* Reduced size */ + height: 16px; /* Reduced size */ + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + background-color: var(--semantic-background-default); + border-radius: 50%; + border: 1px solid var(--semantic-stroke-default); + box-shadow: 0 0 1px rgba(var(--semantic-background-inverted_rgb), 0.3); + transform: translate(30%, 30%); /* Adjust badge position */ + pointer-events: all; + } + + .icon svg { + fill: currentColor; + width: 12px; /* Adjusted size */ + height: 12px; /* Adjusted size */ + } + + input[type="color"] { + z-index: ${f.TOP}; + opacity: 0; + position: absolute; + width: 32px; + height: 32px; + transform: translate(-1px, -1px); + cursor: pointer; + } + `,t.appendChild(e),this.colorInput=document.createElement("input"),this.colorInput.type="color",t.appendChild(this.colorInput);const i=document.createElement("div");i.classList.add("color-container"),this.colorPreview=document.createElement("div"),this.colorPreview.classList.add("color-preview"),i.appendChild(this.colorPreview),this.iconElement=document.createElement("div"),this.iconElement.classList.add("icon"),this.iconElement.innerHTML=` + + + + `,i.appendChild(this.iconElement),t.appendChild(i),this.colorInput.addEventListener("input",this.handleColorChange.bind(this)),this.colorPreview.addEventListener("click",()=>this.colorInput.click()),this.iconElement.addEventListener("click",()=>this.colorInput.click()),this.updateColor(this.getAttribute("value")||"#ffffff")}static get observedAttributes(){return["value","label"]}attributeChangedCallback(t,e,i){t==="value"&&e!==i?this.updateColor(i):t==="label"&&e!==i&&this.updateLabel()}handleColorChange(t){const e=t.target.value;this.colorPreview.style.backgroundColor=e,this.dispatchEvent(new CustomEvent("color-change",{detail:{color:e}}))}updateColor(t){t=t||"#ffffff",this.value=t,this.colorPreview.style.backgroundColor=t,this.colorInput.value=t}updateLabel(){var t;const e=this.getAttribute("label")||"";this.labelElement||(this.labelElement=new S,this.labelElement.display="body1",(t=this.shadowRoot)==null||t.appendChild(this.labelElement)),this.labelElement.textContent=e}set value(t){this.setAttribute("value",t)}get value(){return this.getAttribute("value")||"#ffffff"}set label(t){this.setAttribute("label",t)}get label(){return this.getAttribute("label")||""}}c("color-picker",Vt);class Ot extends HTMLElement{constructor(){super();const t=this.attachShadow({mode:"open"}),e=document.createElement("style");e.textContent=` + :host { + display: block; + width: 100%; + margin: 0; + box-sizing: border-box; + } + + .divider { + height: 1px; + background-color: var(--semantic-stroke-default); + margin-left: 0; + margin-right: 0; + box-sizing: border-box; + transition: background-color 0.3s; + } + + :host([vertical]) { + display: inline-block; + width: 1px; + height: 100%; /* Take up the full height of the parent */ + margin: 0; /* Remove horizontal margins for vertical divider */ + } + + :host([vertical]) .divider { + width: 1px; + height: 100%; /* Ensure it fills the parent height */ + } + + :host([light]) .divider { + background-color: var(--semantic-stroke-light); + } + + :host([fade]) .divider { + background-color: inherit; + border-bottom: 1px solid transparent; + border-image: linear-gradient(90deg,var(--semantic-stroke-highlight),transparent 50%); + border-image-slice: 1; + } + `,t.appendChild(e),this.dividerElement=document.createElement("div"),this.dividerElement.className="divider",t.appendChild(this.dividerElement)}static get observedAttributes(){return["vertical","light"]}set vertical(t){t?this.setAttribute("vertical",""):this.removeAttribute("vertical")}get vertical(){return this.hasAttribute("vertical")}set light(t){t?this.setAttribute("light",""):this.removeAttribute("light")}get light(){return this.hasAttribute("light")}}c("divider",Ot);class Ft extends HTMLElement{constructor(){super();const t=this.attachShadow({mode:"open"}),e=document.createElement("style");e.textContent=` + :host { + display: flex; + flex-wrap: wrap; + } + + ${st()} + ${y()} + + :host([margin-inline="small"]) { + padding-inline: ${o("spacing-sm")}; + } + + :host([margin-block="small"]) { + padding-block: ${o("spacing-sm")}; + } + + :host([margin-inline="medium"]) { + padding-inline: ${o("spacing-md")}; + } + + :host([margin-block="medium"]) { + padding-block: ${o("spacing-md")}; + } + + :host([margin-inline="large"]) { + padding-inline: ${o("spacing-lg")}; + } + + :host([margin-block="large"]) { + padding-block: ${o("spacing-lg")}; + } + + :host([margin-inline="extra-large"]) { + padding-inline: ${o("spacing-xl")}; + } + + :host([margin-block="extra-large"]) { + padding-block: ${o("spacing-xl")}; + } + + + :host([margin-block="extra-large"]) { + padding-block: ${o("spacing-xl")}; + } + `,t.appendChild(e);const i=document.createElement("slot");t.append(i)}static get observedAttributes(){return["margin-inline","margin-block","justify-content","align-items"]}}c("box",Ft);class F extends HTMLElement{constructor(){super(),this.toggleCheckbox=()=>{this.checkboxElement.disabled||(this.checked=!this.checkboxElement.checked,this.dispatchEvent(new Event("change")))};const t=this.attachShadow({mode:"open"}),e=document.createElement("style");e.textContent=` + :host { + display: inline-flex; + align-items: center; + gap: ${o("spacing-xs")}; + cursor: pointer; + width: max-content; + } + + :host([disabled]) { + cursor: not-allowed; + opacity: 0.5; + } + + .checkbox { + appearance: none; + width: 2em; + height: 2em; + border: 2px solid var(--semantic-stroke-default); + border-radius: ${o("border-xs")}; + background-color: transparent; + display: flex; + align-items: center; + justify-content: center; + transition: background-color 0.3s, border-color 0.3s; + cursor: pointer; + } + + .checkbox:checked { + background-color: var(--semantic-background-highlight); + border-color: var(--semantic-background-highlight); + } + + .checkbox:checked::before { + content: ""; + width: 1em; + height: 1em; + background-color: var(--semantic-background-default); + clip-path: polygon(14% 44%, 0% 65%, 50% 100%, 100% 18%, 80% 0%, 43% 62%); + } + + .checkbox:disabled { + background-color: rgba(var(--semantic-background-inverted_rgb), 0.2); + border-color: var(--semantic-stroke-default); + cursor: not-allowed; + } + `,t.appendChild(e),this.checkboxElement=document.createElement("input"),this.checkboxElement.type="checkbox",this.checkboxElement.className="checkbox",t.appendChild(this.checkboxElement);const i=document.createElement("div");i.className="label";const a=document.createElement("slot");i.appendChild(a),t.append(i),this.addEventListener("click",this.toggleCheckbox),this.addEventListener("pointerdown",n=>n.preventDefault()),this.checkboxElement.addEventListener("click",n=>{n.stopPropagation()}),this.updateCheckbox()}static get observedAttributes(){return["checked","disabled"]}attributeChangedCallback(t,e,i){F.observedAttributes.includes(t)&&e!==i&&this.updateCheckbox()}updateCheckbox(){this.checkboxElement.checked=this.hasAttribute("checked"),this.checkboxElement.disabled=this.hasAttribute("disabled"),this.checkboxElement.disabled?this.classList.add("disabled"):this.classList.remove("disabled")}set checked(t){t?this.setAttribute("checked",""):this.removeAttribute("checked")}get checked(){return this.hasAttribute("checked")}set disabled(t){t?this.setAttribute("disabled",""):this.removeAttribute("disabled")}get disabled(){return this.hasAttribute("disabled")}}c("checkbox",F);var T=(s=>(s.HIGHLIGHT="highlight",s.DEFAULT="default",s.INVERTED="inverted",s))(T||{});const nt=class M extends HTMLElement{constructor(){super(),this.shadow=this.attachShadow({mode:"open"});const t=document.createElement("style");t.textContent=` + :host { + display: inline-block; + overflow: hidden; + position: relative; + box-sizing: border-box; + --icon-color: var(--semantic-text-default); + } + + :host([color="${T.DEFAULT}"]) { + --icon-color: var(--semantic-text-default); + } + + :host([color="${T.INVERTED}"]) { + --icon-color: var(--semantic-text-inverted); + } + + :host([color="${T.HIGHLIGHT}"]) { + --icon-color: var(--semantic-text-highlight); + } + + svg { + fill: var(--icon-color); + display: block; + object-fit: contain; + width: 100%; + height: 100%; + } + + :host([size="small"]) { + width: 16px; + height: 16px; + } + + :host([size="medium"]) { + width: 32px; + height: 32px; + } + + :host([size="large"]) { + width: 64px; + height: 64px; + } + + :host([size="none"]) { + width: 100%; + height: 100%; + } + `,this.shadow.appendChild(t)}static get observedAttributes(){return["size","svg"]}attributeChangedCallback(t,e,i){e!==i&&i&&t==="svg"&&this.loadSvg(i)}async loadSvg(t){try{if(M.svgCache.has(t))this.setSvgContent(M.svgCache.get(t));else{const e=await fetch(t);if(!e.ok)throw new Error(`Failed to load SVG: ${e.statusText}`);const i=await e.text();M.svgCache.set(t,i),this.setSvgContent(i)}}catch(e){console.error("Error loading SVG:",e)}}setSvgContent(t){const e=document.createElement("div");e.innerHTML=t;const i=e.querySelector("svg");if(i){if(i.removeAttribute("width"),i.removeAttribute("height"),!i.hasAttribute("viewBox")){const a=i.getAttribute("width")||"100",n=i.getAttribute("height")||"100";i.setAttribute("viewBox",`0 0 ${a} ${n}`)}this.shadow.appendChild(i)}else console.error("No valid SVG element found in the provided content.")}};nt.svgCache=new Map;let D=nt;c("icon",D);class Ut extends HTMLElement{constructor(){super();const t=this.attachShadow({mode:"open"}),e=document.createElement("style");e.textContent=` + :host { + display: block; + padding: 0; + margin: 0; + width: max-content; + } + + /* Style the slotted list (ul or ol) */ + ::slotted(ul), + ::slotted(ol) { + margin: 0; + padding: 0; + list-style-position: inside; /* Ensures the markers are inside */ + } + + /* Custom bullet styling for unordered lists */ + ::slotted(ul) { + list-style-type: disc; /* Use a bullet for unordered lists */ + } + + /* Style list items inside the slotted ul/ol */ + ::slotted(ul li), + ::slotted(ol li) { + padding: 0.5em 0; + border-bottom: 1px solid #ddd; + } + + /* Custom numbering for ordered lists */ + ::slotted(ol) { + list-style-type: decimal; /* Use numbers for ordered lists */ + counter-reset: item; /* Reset counter for custom numbering */ + } + + ::slotted(ol li) { + counter-increment: item; + } + + ::slotted(ol li::before) { + content: counters(item, ".") " "; + font-weight: bold; + margin-right: 0.5em; + } + `,t.appendChild(e);const i=document.createElement("slot");t.appendChild(i)}}c("list",Ut);class Wt extends HTMLElement{constructor(){super();const t=this.attachShadow({mode:"open"}),e=document.createElement("style");e.textContent=` + :host { + width: 100%; + } + `,t.appendChild(e);const i=document.createElement("slot");t.appendChild(i),this.initializeTabs=this.initializeTabs.bind(this)}connectedCallback(){this.initializeTabs()}initializeTabs(){var t;const e=Array.from(this.querySelectorAll(`${l()}-tab-button`)),i=Array.from(this.querySelectorAll(`${l()}-tab-panel`));if(e.length===0||i.length===0){console.error("No tab buttons or panels found.");return}e.forEach(n=>{const r=n.getAttribute("id");r&&n.addEventListener("click",()=>this.selectTab(r))});const a=this.getAttribute("selected")||((t=e[0])==null?void 0:t.getAttribute("id"))||"";a?this.selectTab(a):e.length>0&&this.selectTab(e[0].getAttribute("id")||"")}selectTab(t){const e=Array.from(this.querySelectorAll(`${l()}-tab-button`)),i=Array.from(this.querySelectorAll(`${l()}-tab-panel`));e.forEach(n=>{n.getAttribute("id")===t?n.setAttribute("active",""):n.removeAttribute("active")}),i.forEach(n=>{n.getAttribute("id")===t?n.setAttribute("active",""):n.removeAttribute("active")});const a=this.querySelector(`${l()}-tab-buttons`);a&&typeof a.updateActiveIndicator=="function"&&a.updateActiveIndicator()}}c("tabs",Wt);class Kt extends HTMLElement{constructor(){super();const t=this.attachShadow({mode:"open"}),e=document.createElement("style");e.textContent=` + :host { + display: none; + background: var(--semantic-background-default); + } + + :host([active]) { + display: block; + } + `,t.appendChild(e);const i=document.createElement("slot");t.appendChild(i)}}c("tab-panel",Kt);class Xt extends HTMLElement{constructor(){super();const t=this.attachShadow({mode:"open"}),e=document.createElement("style");e.textContent=` + :host { + display: block; + position: relative; + overflow: hidden; + width: 100%; + } + + .tab-panel { + position: absolute; + top: 0; + left: 100%; + width: 100%; + opacity: 0; + transition: opacity 0.3s ease, transform 0.3s ease; + transform: translateX(100%); + } + + .tab-panel[active] { + position: relative; + left: 0; + opacity: 1; + transform: translateX(0%); + transition: opacity 0.3s ease, transform 0.3s ease; + } + `,t.appendChild(e);const i=document.createElement("slot");t.appendChild(i)}}c("tab-panels",Xt);class Yt extends HTMLElement{constructor(){super();const t=this.attachShadow({mode:"open"}),e=document.createElement("style");e.textContent=` + :host { + display: inline-flex; + justify-content: center; + align-items: center; + padding: 10px; + background: var(--tab-button-bg, transparent); + cursor: pointer; + transition: background 0.3s; + } + + :host([active]) { + font-weight: bold; + } + + :host(:hover) { + background: #e0e0e0; + } + `,t.appendChild(e);const i=document.createElement("slot");t.appendChild(i)}}c("tab-button",Yt);class Jt extends HTMLElement{constructor(){super();const t=this.attachShadow({mode:"open"}),e=document.createElement("style");e.textContent=` + :host { + position: relative; + display: flex; + border-bottom: 1px solid var(--semantic-stroke-default); + margin: 0; + padding: 0; + list-style: none; + overflow: hidden; + width: 100%; + } + + ::slotted(x-tab-button) { + flex: 1; + padding: 10px; + text-align: center; + background: transparent; + border: none; + cursor: pointer; + transition: background 0.3s; + position: relative; + z-index: 1; + } + + .active-indicator { + position: absolute; + bottom: 0; + height: 2px; + background-color: var(--tab-button-active-border-color, var(--semantic-stroke-highlight)); + transition: left 0.3s ease, width 0.3s ease; + z-index: 0; + } + `,t.appendChild(e);const i=document.createElement("slot");t.appendChild(i);const a=document.createElement("div");a.className="active-indicator",t.appendChild(a)}connectedCallback(){requestAnimationFrame(()=>{this.updateActiveIndicator()}),this.addEventListener("slotchange",()=>this.updateActiveIndicator())}updateActiveIndicator(){var t,e;const i=(t=this.shadowRoot)==null?void 0:t.querySelector("slot"),a=(i?.assignedElements()||[]).find(n=>n.hasAttribute("active"));if(a){const n=(e=this.shadowRoot)==null?void 0:e.querySelector(".active-indicator"),r=a.getBoundingClientRect(),d=this.getBoundingClientRect();n.style.left=`${r.left-d.left}px`,n.style.width=`${r.width}px`}}}c("tab-buttons",Jt);class ot extends HTMLElement{constructor(){super(),this.handleClick=()=>{if(!this.radioElement.disabled){const n=this.getAttribute("value")||"",r=new CustomEvent("radio-selected",{bubbles:!0,composed:!0,detail:{radio:this,value:n}});this.dispatchEvent(r)}};const t=this.attachShadow({mode:"open"}),e=document.createElement("style");e.textContent=` + :host { + display: inline-flex; + align-items: center; + gap: ${o("spacing-xs")}; + } + + :host([disabled]) { + cursor: not-allowed; + opacity: 0.5; + } + + label { + display: inline-flex; + align-items: center; + cursor: pointer; + gap: ${o("spacing-xs")}; + } + + .radio { + appearance: none; + width: 2em; /* Adjust size */ + height: 2em; /* Adjust size */ + border: 2px solid var(--semantic-stroke-default); + border-radius: 50%; + background-color: transparent; + display: inline-flex; + align-items: center; + justify-content: center; + transition: background-color 0.3s, border-color 0.3s; + position: relative; /* Important for the inner dot */ + cursor: pointer; + transform: translateY(-3px); + } + + .radio:checked { + background-color: var(--semantic-background-highlight); + border-color: var(--semantic-background-highlight); + } + + .radio:checked::before { + content: ""; + width: 1em; /* Inner dot size */ + height: 1em; + background-color: var(--semantic-background-default); + border-radius: 50%; + position: absolute; + } + + .radio:disabled { + background-color: rgba(var(--semantic-background-inverted_rgb), 0.2); + border-color: var(--semantic-stroke-default); + } + `,t.appendChild(e);const i=document.createElement("label");this.radioElement=document.createElement("input"),this.radioElement.type="radio",this.radioElement.className="radio",i.appendChild(this.radioElement);const a=document.createElement("slot");i.appendChild(a),t.appendChild(i),this.radioElement.addEventListener("click",this.handleClick),this.updateRadio()}static get observedAttributes(){return["checked","disabled","value"]}attributeChangedCallback(){this.updateRadio()}updateRadio(){this.radioElement.checked=this.hasAttribute("checked"),this.radioElement.disabled=this.hasAttribute("disabled")}set checked(t){t?this.setAttribute("checked",""):this.removeAttribute("checked")}get checked(){return this.hasAttribute("checked")}set disabled(t){t?this.setAttribute("disabled",""):this.removeAttribute("disabled")}get disabled(){return this.hasAttribute("disabled")}set value(t){this.setAttribute("value",t)}get value(){return this.getAttribute("value")||""}}c("radio-button",ot);class Zt extends HTMLElement{constructor(){super(),this.handleRadioClick=t=>{const e=t.target;e instanceof ot&&!e.disabled&&(this.setAttribute("selected",e.value),this.dispatchEvent(new CustomEvent("radio-selected",{detail:{radio:e,value:e.value}})))}}connectedCallback(){this.updateRadios(),this.addEventListener("click",this.handleRadioClick)}attributeChangedCallback(){this.updateSelected()}updateSelected(){this.radios=this.querySelectorAll(`${l()}-radio-button`),this.radios.forEach(t=>{t.value===this.getAttribute("selected")&&(this.clearChecked(),t.checked=!0)})}static get observedAttributes(){return["selected"]}updateRadios(){this.radios=this.querySelectorAll(`${l()}-radio-button`);let t=!1;this.radios.forEach(e=>{e.checked&&(t&&(e.checked=!1),t=!0)})}clearChecked(){var t;(t=this.radios)==null||t.forEach(e=>{e.checked=!1})}}c("radio-group",Zt);class Qt extends HTMLElement{constructor(){super();const t=this.attachShadow({mode:"open"}),e=document.createElement("style");e.textContent=` + :host { + display: none; + } + `,t.appendChild(e);const i=document.querySelector(`${l()}-loading`);i&&document.body.removeChild(i)}}c("loading",Qt);class te extends HTMLElement{constructor(){super(),this.disableScroll();const t=this.attachShadow({mode:"open"}),e=document.createElement("style");e.textContent=` + :host { + display: block; + width: 100vw; + height: 100vh; + background-color: var(--semantic-background-default); + color: var(--semantic-text-highlight); + position: fixed; + top: 0; + left: 0; + z-index: ${f.OVERLAY}; + opacity: 1; + transition: opacity 1s ease-in-out; + } + + :host(.hidden) { + opacity: 0; + pointer-events: none; + } + `,t.appendChild(e);const i=document.createElement("slot");t.appendChild(i)}static get observedAttributes(){return["timeout"]}connectedCallback(){const t=Number.parseInt(this.getAttribute("timeout")||"3000");setTimeout(()=>{this.hide()},t)}hide(){this.classList.add("hidden"),setTimeout(()=>{this.enableScroll();const t=`${l()}-theme`;document.querySelector(t).removeChild(this)},1e3)}disableScroll(){document.body.style.height="100vh",document.body.style.width="100vw",document.body.style.overflow="hidden"}enableScroll(){document.body.style.height="",document.body.style.width="",document.body.style.overflow=""}}c("splash",te);var B=(s=>(s.BOTTOM_NAVIGATION="bottom-navigation",s.APP_BAR="app-bar",s))(B||{});class ee extends HTMLElement{constructor(){super(),this.autoDismissTimeout=null;const t=this.attachShadow({mode:"open"}),e=document.createElement("style");e.textContent=` + :host { + display: none; + box-sizing: border-box; + z-index: ${f.SNACKBAR}; + pointer-events: none; + width: max-content; + max-width: 100%; + position: relative; + background-color: transparent; + transition: opacity 0.3s ease, display 0.3s ease allow-discrete; + opacity: 0; + pointer-events: auto; + } + + ${y()} + + :host([fixed]) { + position: fixed; + padding: ${o("spacing-lg")}; + width: 100%; + left: 0; + right: 0; + max-width: 100%; + box-sizing: border-box; + } + + :host([visible]) { + display: block; + opacity: 1; + } + + :host([offset="${B.BOTTOM_NAVIGATION}"]) { + bottom: ${o("bottom-navigation-height")}; + } + + :host([offset="${B.APP_BAR}"]) { + top: ${o("app-bar-height")}; + } + + :host([position="right"]) { + right: 0; + left: auto; + transform: none; + } + + :host([position="left"]) { + left: 0; + right: auto; + transform: none; + } + + /* Child div for content and background */ + .snackbar-content { + box-sizing: border-box; + padding: ${o("spacing-sm")}; + background-color: var(--semantic-background-inverted); + color: var(--semantic-text-inverted); + border-radius: 4px; + box-shadow: ${o("shadow-dark")}; + display: flex; + justify-content: space-between; + align-items: center; + } + + /* Close button styles */ + .close-button { + background: transparent; + border: none; + color: var(--semantic-text-inverted); + font-size: 16px; + cursor: pointer; + margin-left: ${o("spacing-sm")}; + } + + /* Slot for message content */ + ::slotted(*) { + display: block; + flex-grow: 1; + } + + /* Hide the close button when closable is not set */ + :host([closable]) .close-button { + display: block; + } + + :host(:not([closable])) .close-button { + display: none; + } + `,t.appendChild(e);const i=document.createElement("div");i.classList.add("snackbar-content");const a=document.createElement("slot");i.appendChild(a);const n=document.createElement("button");n.classList.add("close-button"),n.innerHTML="✕",n.addEventListener("click",()=>{this.visible=!1}),i.appendChild(n),t.appendChild(i),this.setupAutoDismiss()}static get observedAttributes(){return["visible","position","timeout","offset","closable"]}attributeChangedCallback(t,e,i){t==="visible"&&e!==i?this.toggleVisibility():t==="timeout"&&e!==i?this.setupAutoDismiss():t==="closable"&&e!==i&&this.updateCloseButtonVisibility()}toggleVisibility(){this.visible?(this.classList.add("visible"),this.startAutoDismiss()):this.classList.remove("visible")}setupAutoDismiss(){this.autoDismissTimeout&&clearTimeout(this.autoDismissTimeout);const t=this.timeout;t>0&&(this.autoDismissTimeout=setTimeout(()=>{this.visible=!1},t))}startAutoDismiss(){this.timeout>0&&(this.autoDismissTimeout=setTimeout(()=>{this.removeAttribute("visible")},this.timeout))}updateCloseButtonVisibility(){var t;const e=(t=this.shadowRoot)==null?void 0:t.querySelector(".close-button");e&&(this.hasAttribute("closable")?e.style.display="block":e.style.display="none")}set visible(t){t?(this.setAttribute("visible",""),this.style.display="block"):this.removeAttribute("visible")}get visible(){return this.hasAttribute("visible")}set timeout(t){this.setAttribute("timeout",t.toString())}get timeout(){return parseInt(this.getAttribute("timeout")||"0",10)}}c("snackbar",ee);class ie extends HTMLElement{constructor(){super();const t=this.attachShadow({mode:"open"}),e=document.createElement("style");e.textContent=` + :host { + display: block; + width: 100%; + position: relative; /* Ensure positioning context for inner divs */ + } + + /* Fixed/Sticky navigation styles */ + .bottom-nav { + width: 100%; + justify-content: space-evenly; + background-color: var(--semantic-background-alternate); + border-top: 1px solid var(--semantic-stroke-default); + color: var(--semantic-text-default); + padding: ${o("spacing-sm")}; + box-sizing: border-box; + position: var(--bottom-nav-position, sticky); + bottom: 0; + left: 0; + transition: bottom 0.3s ease-in-out; + height: ${o("bottom-navigation-height")}; + display: flex; + align-items: center; + } + + .spacer { + display: none; + height: ${o("bottom-navigation-height")}; + } + + :host([fixed]) .spacer { + display: block; + } + + :host([fixed]) { + z-index: ${f.TOP}; + } + + :host([fixed]) .bottom-nav { + position: fixed; + } + + :host([static]) .bottom-nav { + position: static; + } + `,t.appendChild(e);const i=document.createElement("div");i.className="spacer";const a=document.createElement("div");a.className="bottom-nav";const n=document.createElement("slot");a.appendChild(n),t.appendChild(i),t.appendChild(a)}static get observedAttributes(){return["fixed","static"]}}c("bottom-navigation",ie);class se extends HTMLElement{constructor(){super(),this.shadow=this.attachShadow({mode:"open"});const t=document.createElement("style");t.textContent=` + :host { + display: flex; + flex-direction: column; + align-items: center; + gap: ${o("spacing-xs")}; + justify-content: center; + padding: ${o("spacing-xs")}; + box-sizing: border-box; + text-align: center; + cursor: pointer; + transition: color 0.18s ease-in-out; + height: calc(${o("bottom-navigation-height")} - 4px); /* Fixed height */ + width: auto; /* Allow width to adjust based on content */ + } + + :host(:hover), :host([active]) { + color: var(--semantic-text-highlight); + } + + .icon-container { + display: flex; + align-items: center; + justify-content: center; + width: 100%; + height: 100%; /* Fixed height as a percentage of the container height */ + overflow: hidden; + } + + .icon { + object-fit: contain; /* Ensure proper scaling */ + } + + .label { + width: 100%; + text-align: center; + } + + /* Hide label if not provided */ + :host([no-label]) .label { + display: none; + } + `;const e=this.getAttribute("svg");if(e){const a=document.createElement("div");a.className="icon-container",this.icon=new D,this.icon.setAttribute("svg",e),this.icon.setAttribute("size","none"),this.icon.className="icon",a.appendChild(this.icon),this.shadow.appendChild(a)}const i=new S;i.className="label",i.setAttribute("display","h6"),i.textContent=this.getAttribute("label")||"",this.getAttribute("label")||this.setAttribute("no-label",""),this.shadow.appendChild(t),this.shadow.appendChild(i)}static get observedAttributes(){return["svg"]}attributeChangedCallback(t,e,i){if(t==="svg"&&e!==i){const a=this.shadow.querySelector(".icon-container");this.icon?i?this.icon.setAttribute("svg",i):(a&&a.removeChild(this.icon),this.icon=void 0):i&&(this.icon=new D,this.icon.setAttribute("svg",i),this.icon.className="icon",a&&a.appendChild(this.icon))}}}c("bottom-navigation-action",se);const X="en",w={"app.title":{en:"Bulls App",de:" Bulls App"},"app.offline":{en:"You are offline, and data may be outdated.",de:"Du bist offline, Daten sind eventuell nicht aktuell."},"app.games":{en:"Schedule",de:"Spielplan"},"app.games.tab-bulls":{en:"Bulls",de:"Bulls"},"app.games.tab-teams":{en:"My Teams",de:"Meine Teams"},"app.settings.my-teams":{en:"My Teams",de:"Meine Teams"},"app.settings.games":{en:"Games and Events",de:"Spiele und Veranstaltungen"},"app.events.no-events":{en:"No events are scheduled at the moment",de:"Derzeit sind keine Veranstaltungen geplant"},"app.settings.showPastGames":{en:"Show past games",de:"Vergangene Spiele anzeigen"},"app.settings.showPastEvents":{en:"Show past event",de:"Vergangene Veranstaltungen anzeigen"},"app.settings.display":{en:"Display",de:"Anzeige"},"app.settings.theme":{en:"Theme",de:"Thema"},"app.settings.theme.auto":{en:"Auto",de:"Automatisch"},"app.settings.theme.dark":{en:"Dark",de:"Dunkel"},"app.settings.theme.light":{en:"Light",de:"Hell"},"app.settings.language":{en:"Language",de:"Sprache"},"app.settings.language.auto":{en:"Auto",de:"Automatisch"},"app.settings.language.de":{en:"German",de:"Deutsch"},"app.settings.language.en":{en:"English",de:"Englisch"},"app.settings.reload":{en:"Reload App?",de:"App neu laden?"},"app.games.no-games":{en:"No games scheduled at the moment",de:"Derzeit sind keine Spiele geplant"},"app.settings.version":{en:"App Version",de:"App Version"},"app.settings.about":{en:"About This App",de:"Ãœber diese App"},"app.settings.legal":{en:"This app works offline and does not store any personal data on remote servers. All data is processed and stored only on your device. The app may use external services to retrieve publicly available information, but no personal data is shared or transmitted.",de:"Diese App funktioniert offline und speichert keine persönlichen Daten auf entfernten Servern. Alle Daten werden ausschließlich auf Ihrem Gerät verarbeitet und gespeichert. Die App kann externe Dienste nutzen, um öffentlich verfügbare Informationen abzurufen, aber keine persönlichen Daten werden geteilt oder übertragen."},"app.settings.outdated":{en:"The information provided by this app may be subject to change and could be outdated. While we strive to keep it accurate, we cannot guarantee that all data is always up to date.",de:"Die Informationen, die diese App bereitstellt, können sich ändern und möglicherweise veraltet sein. Obwohl wir uns bemühen, sie stets aktuell zu halten, können wir nicht garantieren, dass alle Daten immer auf dem neuesten Stand sind."}};function rt(){return h.getLanguage()==="auto"?navigator.languages!=null?navigator.languages[0].split("-")?.[0]:navigator.language.split("-")?.[0]:h.getLanguage()}const ae="en";function g(s,t){return t=rt()||ae,w[s]&&w[s][t]?w[s][t]:w[s]&&w[s][X]?w[s][X]:s}class m extends HTMLElement{static routes=[];constructor(){super(),window.addEventListener("hashchange",()=>this.update()),this.update()}static unregister(t){this.routes=this.routes.filter(e=>e!==t)}static register(t){this.routes.push(t),t.isMatchingPath()?t.show():t.hide()}static current(){return window.location.hash.slice(1)}update(){m.routes.forEach(t=>{t.isMatchingPath()?t.show():t.hide()})}connectedCallback(){this.update()}static default(){return m.routes.find(t=>t.isDefault)}static exists(t){return m.routes.some(e=>e.path===t)}}class lt extends HTMLElement{shadow;snackbarContainer;constructor(){super(),this.shadow=this.attachShadow({mode:"open"}),this.shadow.innerHTML=` + + + + + + + + +
+ + + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + `,this.snackbarContainer=this.shadow.querySelector("#snackbar-container")}connectedCallback(){setTimeout(()=>{const t=this.shadow.querySelector("#splash");t&&(t.classList.add("fade-out"),t.addEventListener("transitionend",()=>{t.remove(),this.removeAttribute("style")}))},2e3),this.networkStatusListener(),this.activeBottomNavigation()}activeBottomNavigation(){const t=this.shadow.querySelectorAll("x-bottom-navigation > x-bare-link > a");if(t.length===0)return;const e=()=>{const a=m.current();for(const n of t){const r=n.href.split("#")?.[1],d=n.querySelector("x-bottom-navigation-action");d&&(r===a?d.setAttribute("active",""):d.removeAttribute("active"))}},i=()=>{m.current()||(window.location.hash="#games"),e()};window.addEventListener("hashchange",e),window.addEventListener("popstate",e),i()}networkStatusListener(){window.addEventListener("online",()=>{const t=this.snackbarContainer.querySelector("#offline-status");t&&t.removeAttribute("visible")}),window.addEventListener("offline",()=>{let t=this.snackbarContainer.querySelector("#offline-status");t||(this.snackbarContainer.innerHTML=` + + ${g("app.offline")} + + `,t=this.snackbarContainer.querySelector("#offline-status")),t.setAttribute("visible","")})}}const U=rt(),ne=new Intl.DateTimeFormat(U,{dateStyle:"full",timeStyle:"short"}),oe=new Intl.DateTimeFormat(U,{dateStyle:"full"}),re=new Intl.DateTimeFormat(U,{timeStyle:"short"});function dt(s){return s{let e=Y[s];if(!e)try{e=await(await fetch(`${v.API_BASE}${s}`.replace(/([^:])(\/\/+)/g,"$1/"))).json(),Y[s]=e}catch(i){if(i instanceof Error&&le(i)&&t)return t();throw i}return e};function le(s){return!!(s.name==="TypeError"&&s.message.includes("Failed to fetch")&&!window.navigator.onLine)}class ct{static async findAll(){return(await L("/api/leagues.json",()=>[])).map(e=>({id:e.slug,name:e.name,shortName:e.shortName}))}static async findById(t){const e=(await this.findAll()).find(i=>i.id===t);if(!e)throw new Error(`League ${t} not found`);return e}}class C{static TEAM_MAPPING={"Hard Bulls":"hb_1","Hard Bulls Bandidos":"hb_2","Hard Bulls Bullets":"hb_3","Hard Barons":"hb_4_sp","Hard Bulls U8":"hb_1","Hard Bulls U10":"hb_1","Hard Bulls U12":"hb_1","Hard Bulls U13":"hb_1","Hard Bulls U14":"hb_1","Hard Bulls U15":"hb_1","Hard Bulls U16":"hb_1","Feldkirch Cardinals":"fc_1","Feldkirch Cardinals U8":"fc_1","Feldkirch Cardinals U10":"fc_1","Feldkirch Cardinals U12":"fc_1","Feldkirch Cardinals U14":"fc_1","Feldkirch Cardinals U16":"fc_1","Feldkirch Cardinals 2":"fc_1","Feldkirch Cardinals 3":"fc_1","Diving Ducks Wr. Neustadt":"dd_1","Vienna Wanderers":"vw_1","Vienna Wanderers 2":"vw_1","Vienna Metrostars":"vm_1","Vienna Metrostars 2":"vm_1","Schwechat Blue Bats":"bb_1","Traiskirchen Grasshoppers":"gh_1","Dornbirn Indians":"di_1","Dornbirn Indians 2":"di_1","Dornbirn Indians 3":"di_1","Dornbirn Indians Minis U8":"di_1","Dornbirn Indians Kids U10":"di_1","Dornbirn Little Indians U12":"di_1","Dornbirn Indians Ponies U14":"di_1","Dornbirn Legends":"di_2_sp","Dornbirn Redhawks":"di_3_sp","Dornbirn Bears":"di_4_sp","ASAK Athletics":"aa_1","Dirty Sox Graz":"ds_1","Kufstein Vikings":"kv_1","Kufstein Vikings U14":"kv_1","Schwaz Tigers":"st_1","Feldkirch Angry Balls":"fc_2_sp","Centurions Wels":"cw_1","SG Indians - Vikings U16":"di_kv_1","SG Indians - Bulls":"di_hb_1","Feldkirch Falcons":"fc_2_fp","Wil Pirates":"ch-wp_1","Baldham Boars":"de-bb_1","Zürich Challengers":"ch-zc_1","Pee Wees St. Pölten":"pw_1_fp","SG Crazy Chicklets - Metrostars":"cc_vw_1_fp"};static async findAll(){return(await L("/api/teams.json",()=>[])).map(e=>({id:e.id,name:e.name,nameShort:e.nameShort,logo:`${v.API_BASE}assets/teams/${e.logo}`}))}static async findByName(t){const e=await C.findAll();for(const i of e)for(const[a,n]of Object.entries(C.TEAM_MAPPING))if(a.trim().toLowerCase()===t.trim().toLowerCase()&&i.id===n)return i;throw new Error(`Team ${t} not found!`)}}class A{static FIELD_CACHE={};static async findAll(){return(await L("/api/fields.json",()=>[])).map(e=>({teams:e.teams,location:e.location,venue:e.venue,image:e.image?`${v.API_BASE}assets/fields/${e.image}`:void 0,keywords:e.keywords}))}static async findByKeyword(t){let e=A.FIELD_CACHE[t];if(e)return e;if(t.trim()===",")return;const i=(await A.findAll()).find(a=>a.keywords.includes(t))||void 0;return i&&(A.FIELD_CACHE[t]=i),i}}class J{static async findScheduledBySeasonAndLeague(t,e,i){const a=await L(`/api/seasons/${t}/${e}/games.json`,()=>[]),n=[];for(const r of a){const d=new Date(r.date);(i?!dt(d)&&r.status==="scheduled":!0)&&n.push({home:await C.findByName(r.home),away:await C.findByName(r.away),homeScore:r.homeScore,awayScore:r.awayScore,venue:r.venue?await A.findByKeyword(r.venue):void 0,date:d,league:await ct.findById(r.league)})}return Object.values(n).sort((r,d)=>r.date.getTime()-d.date.getTime())}}class de extends HTMLElement{shadow;bullsGames=[];noBullsGames;noUserGames;showPastGames;userGames=[];userLeagues=[];isLoading=!0;constructor(){super(),this.shadow=this.attachShadow({mode:"open"})}update(){this.isLoading?this.shadow.innerHTML=` + + `:this.shadow.innerHTML=` + + + + ${g("app.games.tab-teams")} + + + ${g("app.games.tab-bulls")} + + + + + + + + + ${this.noUserGames?this.renderNoGames():this.renderGameCards(this.userGames)} + + + + + + ${this.noBullsGames?this.renderNoGames():this.renderGameCards(this.bullsGames)} + + + + + + + `}renderNoGames(){return` + + + ${g("app.games.no-games")} + + + `}renderGameCards(t){return t.map(e=>` + + + `).join("")}connectedCallback(){(async()=>{this.isLoading=!0,this.update();let t=!1;const e=h.getShowPastGames();if(this.bullsGames.length===0||this.showPastGames!==e){for(const a of v.BULLS_LEAGUES)this.bullsGames.push(...await J.findScheduledBySeasonAndLeague(v.SEASON,a,!e));this.bullsGames=this.sortGames(this.bullsGames),t=!0}this.noBullsGames=this.bullsGames.length===0;const i=h.getLeagues();if(i.length!==this.userLeagues.length||i.sort().join()!==this.userLeagues.sort().join()||this.showPastGames!==e){this.userLeagues=i;const a=[];for(const n of i)a.push(...await J.findScheduledBySeasonAndLeague(v.SEASON,n,!e));this.userGames=this.sortGames(a),t=!0}this.noUserGames=this.userGames.length===0,this.showPastGames=e,this.isLoading=!1,t&&this.update()})()}sortGames(t){return t.sort((e,i)=>e.date.getTime()>i.date.getTime()?1:e.date.getTime() + :host { + display: block; + width: 100%; + min-width: 370px; + position: relative; /* To position the ::before element correctly */ + } + + @media (max-width: 375px) { + :host { + min-width: 0; + } + } + + .game-card-background { + position: relative; + width: 100%; + height: 100%; + display: block; + } + + :host::before { + content: ''; + position: absolute; + top: 0; + left: 0; + width: 100%; /* Cover half the width */ + height: 100%; /* Cover half the height */ + background-image: + linear-gradient(to bottom, rgba(var(--semantic-background-default_rgb), 0) 0%, rgba(var(--semantic-background-default_rgb), 0.1) 25%, rgba(var(--semantic-background-default_rgb), 0.7) 50%, rgba(var(--semantic-background-default_rgb), 1) 100%), + url(${n||"none"}); + background-size: cover; + background-repeat: no-repeat; + background-position: center; + } + + + + + + + + + ${e} + + + ${e} + + + + + + — + + + + + + ${t} + + + ${t} + + + + + + + + + + ${oe.format(b)} + + + + + + ${re.format(b)} + + + + + + ${d} + + + + + ${r?` + + + + + ${r} + + + + + `:""} + + + `}}class ce extends HTMLElement{shadow;leagues=[];selectedLeagueIds=[];constructor(){super(),this.shadow=this.attachShadow({mode:"open"})}update(){this.shadow.innerHTML=` + + + + ${g("app.settings.my-teams")} + + + + + + + + ${g("app.settings.games")} + + + + + + + + + + ${g("app.settings.display")} + + + + + ${g("app.settings.theme")} + + + + + + ${g("app.settings.theme.auto")} + + + ${g("app.settings.theme.light")} + + + ${g("app.settings.theme.dark")} + + + + + + + + ${g("app.settings.language")} + + + + + + + + + + ${g("app.settings.about")} + + + + + ${g("app.settings.outdated")} + + + + ${g("app.settings.legal")} + + + + ${g("app.settings.version")} 0.0.1-alpha + + + + + `,this.renderMyTeamCheckboxes(this.leagues);const t=this.shadow.querySelector("#language-select");t.addEventListener("select-change",n=>{h.getLanguage()!==n.detail.value&&(h.setLanguage(n.detail.value),confirm(g("app.settings.reload"))&&window.location.reload())}),t.setAttribute("selected",h.getLanguage());const e=this.shadow.querySelector("#show-past-games");e.addEventListener("change",n=>{h.setShowPastGames(n.target.checked)}),h.getShowPastGames()?e.setAttribute("checked","checked"):e.removeAttribute("checked");const i=this.shadow.querySelector("#show-past-events");i.addEventListener("change",n=>{h.setShowPastEvents(n.target.checked)}),h.getShowPastEvents()?i.setAttribute("checked","checked"):i.removeAttribute("checked");const a=this.shadow.querySelector("#app-theme");a.setAttribute("selected",h.getTheme()),a.addEventListener("radio-selected",n=>{h.setTheme(n.detail.value),document.querySelector("x-theme").setAttribute("theme",h.getTheme())})}renderMyTeamCheckboxes(t){this.shadow.querySelector("#select-my-teams").append(...t.map(i=>{const a=new at;return a.setAttribute("label",i.name),a.addEventListener("change",n=>{n.target.checked?h.addLeague(i.id):h.removeLeague(i.id),this.selectedLeagueIds=h.getLeagues()}),a.checked=this.selectedLeagueIds.includes(i.id),a}))}connectedCallback(){(async()=>(this.leagues=await ct.findAll(),this.selectedLeagueIds.push(...h.getLeagues()),this.update()))()}}class he extends HTMLElement{static get observedAttributes(){return["path","default"]}lastState=null;connectedCallback(){m.register(this),this.isMatchingPath()||(this.style.display="none"),m.current()===""&&this.isDefault&&(this.style.display="block")}disconnectedCallback(){m.unregister(this)}get path(){return this.getAttribute("path")||""}get isDefault(){return this.hasAttribute("default")}set path(t){this.setAttribute("path",t)}isMatchingPath(){return this.path.split(",").map(e=>e.trim()).includes(m.current())}show(){this.style.display="block";const t=h.getStateString();this.lastState!==t&&(this.lastState=t,this.childNodes.forEach(e=>{const i=e.cloneNode(!0);this.replaceChild(i,e)}))}hide(){this.style.display="none"}}class ue{static async findAll(t){return(await L("/api/events.json",()=>[])).map(i=>({...i,logo:`${v.API_BASE}assets/events/${i.logo}`,date:new Date(i.date)})).filter(i=>t?!dt(i.date):!0).sort((i,a)=>i.date.getTime()-a.date.getTime())}}class pe extends HTMLElement{shadow;events=[];noEvents;showPastEvents;isLoading=!0;constructor(){super(),this.shadow=this.attachShadow({mode:"open"})}update(){this.isLoading?this.shadow.innerHTML=` + + `:this.shadow.innerHTML=` + + + + ${this.noEvents?this.renderNoEvents():this.renderEventCards(this.events)} + + + + `}renderNoEvents(){return` + + + ${g("app.events.no-events")} + + + `}renderEventCards(t){return t.map(e=>` + + + `).join("")}connectedCallback(){(async()=>{let t=!1;this.isLoading=!0,this.update();const e=h.getShowPastEvents();(this.events.length===0||this.showPastEvents!==e)&&(this.events.push(...await ue.findAll(!e)),t=!0),this.noEvents=this.events.length===0,this.showPastEvents=e,this.isLoading=!1,t&&this.update()})()}}class K extends HTMLElement{static observedAttributes=["title","description","date","venue","logo"];shadow;constructor(){super(),this.shadow=this.attachShadow({mode:"open"});const t=document.createElement("style");t.textContent=` + :host { + display: block; + width: 100%; + min-width: 370px; + } + `,this.shadow.appendChild(t),this.update()}attributeChangedCallback(t,e,i){K.observedAttributes.includes(t)&&e!==i&&this.update()}update(){const t=this.getAttribute("title")||"",e=this.getAttribute("description")||void 0,i=this.getAttribute("logo")||void 0,a=this.getAttribute("venue"),n=this.getAttribute("date")||new Date("1970"),r=new Date(n);this.shadow.innerHTML=` + + ${i?``:""} + + + + + ${t} + + + + + + + ${ne.format(r)} + + + + + ${a} + + + + + + + ${e?` + + ${e} + + `:""} + + + + `}}class ge extends HTMLElement{constructor(){super(),localStorage.getItem("_beta_access")==="true"||this.hasAttribute("disabled")||this.hasAttribute("enabled")&&!1?document.body.style.display="block":prompt("Password")==="bulls2025"?(document.body.style.display="block",localStorage.setItem("_beta_access","true")):(document.body.innerHTML="

Access Denied

",document.body.style.display="block",document.body.style.textAlign="center")}}class me extends HTMLElement{constructor(){super();const t=this.attachShadow({mode:"open"}),e=document.createElement("style");e.textContent=` + :host { + display: block; + width: 100vw; + height: 100vh; + color: var(--semantic-text-highlight); + position: fixed; + top: 0; + left: 0; + z-index: 999; + opacity: 1; + transition: opacity 1s ease-in-out; + pointer-events: none; + background-repeat: no-repeat; + background-size: cover; + background-position: center; + } + + /* Styles for portrait orientation */ + @media (orientation: portrait) { + :host { + background-image: url("/images/background_portrait.webp"); + } + } + + /* Styles for landscape orientation */ + @media (orientation: landscape) { + :host { + background-image: url("/images/background_landscape.webp"); + } + } + + .logo { + display: flex; + justify-content: center; + height: 100vh; + width: 100%; + align-items: center; + filter: drop-shadow(2px 10px 10px #000000); + opacity: 0; /* Start hidden */ + animation: fadeIn 1.1s ease-in forwards; /* Fast fade-in effect */ + } + + /* Fade-in animation for the logo */ + @keyframes fadeIn { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } + } + `,t.appendChild(e);const i=document.createElement("div");i.classList.add("logo"),i.innerHTML=` + + `,t.append(i)}}let G;async function be(){return window.matchMedia("(display-mode: standalone)").matches||"standalone"in window.navigator&&window.navigator.standalone?!0:"getInstalledRelatedApps"in navigator&&typeof navigator.getInstalledRelatedApps=="function"?(await navigator.getInstalledRelatedApps()).length>0:!1}function fe(){window.addEventListener("beforeinstallprompt",s=>{s.preventDefault(),G=s,console.log("Install prompt event detected")})}function Z(s=5e3){return new Promise(t=>{const e=Date.now(),i=()=>{G?t(G):Date.now()-e{navigator.serviceWorker.register("/service-worker.js",{scope:"/",type:"module"}).then(e=>{console.log("ServiceWorker registration successful with scope: ",e.scope)}).catch(e=>{console.log("ServiceWorker registration failed: ",e)})})}class ve extends HTMLElement{shadow;constructor(){super(),this.shadow=this.attachShadow({mode:"open"}),this.shadow.innerHTML=` + + + + + + + + ${g("app.title")} + + + + + + + `}connectedCallback(){(async()=>{if(await be()||!await Z())return;const t=this.shadow.querySelector("#top-right");t.innerHTML=` + + `,t.querySelector("#install").addEventListener("click",async()=>{const i=await Z();i&&(await i.prompt(),i.userChoice.then(a=>{if(a.outcome==="accepted")console.log("User accepted the A2HS prompt");else{console.log("User dismissed the A2HS prompt");return}window.location.reload()}))})})()}}class ye extends HTMLElement{shadow;constructor(){super(),this.shadow=this.attachShadow({mode:"open"}),this.shadow.innerHTML=` + + + + + + `}}fe();yt("x");kt();wt();document.querySelector("x-theme")?.setAttribute("theme",h.getTheme());customElements.define("hb-soft-auth",ge);customElements.define("hb-loading",ye);customElements.define("hb-splash",me);customElements.define("hb-route",he);customElements.define("hb-router",m);customElements.define("hb-shell",lt);customElements.define("hb-header",ve);customElements.define("hb-settings-page",ce);customElements.define("hb-games-page",de);customElements.define("hb-events-page",pe);customElements.define("hb-game-card",W);customElements.define("hb-event-card",K);document.querySelector("x-container")?.append(new lt);xe(); diff --git a/main.DUuuPnxD.js b/main.DUuuPnxD.js deleted file mode 100644 index 4402eb3..0000000 --- a/main.DUuuPnxD.js +++ /dev/null @@ -1,4472 +0,0 @@ -import { C as CONFIG } from './assets/config-Bk6KWWaJ.js'; - -true&&(function polyfill() { - const relList = document.createElement("link").relList; - if (relList && relList.supports && relList.supports("modulepreload")) { - return; - } - for (const link of document.querySelectorAll('link[rel="modulepreload"]')) { - processPreload(link); - } - new MutationObserver((mutations) => { - for (const mutation of mutations) { - if (mutation.type !== "childList") { - continue; - } - for (const node of mutation.addedNodes) { - if (node.tagName === "LINK" && node.rel === "modulepreload") - processPreload(node); - } - } - }).observe(document, { childList: true, subtree: true }); - function getFetchOpts(link) { - const fetchOpts = {}; - if (link.integrity) fetchOpts.integrity = link.integrity; - if (link.referrerPolicy) fetchOpts.referrerPolicy = link.referrerPolicy; - if (link.crossOrigin === "use-credentials") - fetchOpts.credentials = "include"; - else if (link.crossOrigin === "anonymous") fetchOpts.credentials = "omit"; - else fetchOpts.credentials = "same-origin"; - return fetchOpts; - } - function processPreload(link) { - if (link.ep) - return; - link.ep = true; - const fetchOpts = getFetchOpts(link); - fetch(link.href, fetchOpts); - } -}()); - -class Storage { - static state = { - theme: "auto", - language: "auto", - showPastGames: false, - showPastEvents: false, - leagues: [] - }; - static setTheme(theme) { - localStorage.setItem("theme", theme); - Storage.state.theme = theme; - } - static getTheme() { - return Storage.state.theme; - } - static setLanguage(language) { - localStorage.setItem("language", language); - Storage.state.language = language; - } - static getLanguage() { - return Storage.state.language; - } - static setShowPastGames(showPastGames) { - localStorage.setItem("showPastGames", JSON.stringify(showPastGames)); - Storage.state.showPastGames = showPastGames; - } - static getShowPastGames() { - return Storage.state.showPastGames; - } - static setShowPastEvents(showPastEvents) { - localStorage.setItem("showPastEvents", JSON.stringify(showPastEvents)); - Storage.state.showPastEvents = showPastEvents; - } - static getShowPastEvents() { - return Storage.state.showPastEvents; - } - static setLeagues(leagues) { - localStorage.setItem("leagues", JSON.stringify(leagues)); - Storage.state.leagues = leagues; - } - static addLeague(league) { - const leagues = Storage.getLeagues(); - if (!leagues.includes(league)) { - leagues.push(league); - Storage.setLeagues(leagues); - } - } - static removeLeague(league) { - Storage.setLeagues(Storage.getLeagues().filter((v) => v !== league)); - } - static getLeagues() { - return Storage.state.leagues; - } - static getStateString() { - return JSON.stringify(this.state); - } - static load() { - const leagues = localStorage.getItem("leagues"); - Storage.state = { - theme: localStorage.getItem("theme") || "auto", - language: localStorage.getItem("language") || "auto", - showPastGames: localStorage.getItem("showPastGames") === "true", - showPastEvents: localStorage.getItem("showPastEvents") === "true", - leagues: leagues ? JSON.parse(leagues) : [] - }; - } -} -Storage.load(); - -let L = "x", z = []; -function It(s) { - L = s; -} -function d(s, t, i) { - z.push(() => { - window.customElements.define( - `${L}-${s}`, - t, - i - ); - }); -} -function Nt() { - for (const s of z) - s(); - z = []; -} -function l() { - return L; -} -function n(s) { - return `var(--${l()}-${s})`; -} -function Dt() { - document.addEventListener("DOMContentLoaded", function() { - const s = `${l()}-theme`, t = document.querySelector(s); - if (!t) - throw new Error(`Not theme tag found: ${s}`); - if (t.style.display !== "none") - throw new Error( - 'Theme tag needs inline style of "display: none" for the wait functionality to work.' - ); - t && customElements.get(s) ? t.style.display = "" : customElements.whenDefined(s).then(() => { - t.style.display = ""; - }); - }); -} -var m = /* @__PURE__ */ ((s) => (s[s.XS = 480] = "XS", s[s.MD = 600] = "MD", s[s.LG = 960] = "LG", s[s.XL = 1280] = "XL", s))(m || {}), v = /* @__PURE__ */ ((s) => (s.LIGHT = "light", s.DARK = "dark", s.AUTO = "auto", s))(v || {}); -function g(s) { - let t = 0, i = 0, e = 0; - return s.length === 4 ? (t = parseInt(s[1] + s[1], 16), i = parseInt(s[2] + s[2], 16), e = parseInt(s[3] + s[3], 16)) : s.length === 7 && (t = parseInt(s[1] + s[2], 16), i = parseInt(s[3] + s[4], 16), e = parseInt(s[5] + s[6], 16)), `${t}, ${i}, ${e}`; -} -function h(s, t) { - let i = !1; - s[0] === "#" && (s = s.slice(1), i = !0); - const e = parseInt(s, 16); - let o = (e >> 16) + t; - o = o > 255 ? 255 : o < 0 ? 0 : o; - let a = (e >> 8 & 255) + t; - a = a > 255 ? 255 : a < 0 ? 0 : a; - let r = (e & 255) + t; - return r = r > 255 ? 255 : r < 0 ? 0 : r, (i ? "#" : "") + (16777216 + (o << 16) + (a << 8) + r).toString(16).slice(1); -} -function Z(s, t, i, e, o) { - function a(r, c, u, f) { - const k = f ? 60 : -60, E = g(r), A = g(c), C = g(u); - return { - primary: { - 50: h(r, 100), - 100: h(r, 70), - 200: h(r, 50), - 300: h(r, 30), - 400: h(r, 20), - 500: r, - 600: h(r, -10), - 700: h(r, -20), - 800: h(r, -30), - 900: h(r, -50) - }, - secondary: { - 50: h(r, -100), - 100: h(r, -70), - 200: h(r, -50), - 300: h(r, -30), - 400: h(r, -20), - 500: h(r, -10), - 600: h(r, -20), - 700: h(r, -30), - 800: h(r, -40), - 900: h(r, -50) - }, - background: { - 50: h(c, 100), - 100: h(c, 70), - 200: h(c, 50), - 300: h(c, 30), - 400: h(c, 20), - 500: c, - 600: h(c, -10), - 700: h(c, -20), - 800: h(c, -30), - 900: h(c, -50), - 1e3: h(c, -80) - }, - neutral: { - background: c, - text: u, - border: h(c, k) - }, - rgb: { - primary: E, - secondary: g(h(r, -20)), - background: A, - text: C, - border: g(h(c, k)) - } - }; - } - return { - light: a( - s, - i, - t, - !1 - ), - dark: a(s, o, e, !0) - }; -} -function tt(s) { - function t(e) { - const { primary: o, secondary: a, neutral: r, rgb: c, background: u } = s[e]; - return ` - --${e}-primary-50: ${o[50]}; - --${e}-primary-100: ${o[100]}; - --${e}-primary-200: ${o[200]}; - --${e}-primary-300: ${o[300]}; - --${e}-primary-400: ${o[400]}; - --${e}-primary-500: ${o[500]}; - --${e}-primary-600: ${o[600]}; - --${e}-primary-700: ${o[700]}; - --${e}-primary-800: ${o[800]}; - --${e}-primary-900: ${o[900]}; - - - --${e}-primary-100_rgb: ${g(o[100])}; - --${e}-primary-900_rgb: ${g(o[900])}; - - --${e}-secondary-50: ${a[50]}; - --${e}-secondary-100: ${a[100]}; - --${e}-secondary-200: ${a[200]}; - --${e}-secondary-300: ${a[300]}; - --${e}-secondary-400: ${a[400]}; - --${e}-secondary-500: ${a[500]}; - --${e}-secondary-600: ${a[600]}; - --${e}-secondary-700: ${a[700]}; - --${e}-secondary-800: ${a[800]}; - --${e}-secondary-900: ${a[900]}; - - --${e}-background-50: ${u[50]}; - --${e}-background-100: ${u[100]}; - --${e}-background-200: ${u[200]}; - --${e}-background-300: ${u[300]}; - --${e}-background-400: ${u[400]}; - --${e}-background-500: ${u[500]}; - --${e}-background-600: ${u[600]}; - --${e}-background-700: ${u[700]}; - --${e}-background-800: ${u[800]}; - --${e}-background-900: ${u[900]}; - --${e}-background-1000: ${u[1e3]}; - - --${e}-background: ${r.background}; - --${e}-text: ${r.text}; - --${e}-border: ${r.border}; - - --${e}-primary_rgb: ${c.primary}; - --${e}-secondary_rgb: ${c.secondary}; - --${e}-background_rgb: ${c.background}; - --${e}-text_rgb: ${c.text}; - --${e}-border_rgb: ${c.border}; - `; - } - function i(e) { - const o = e === "light" ? "dark" : "light"; - return ` - --semantic-stroke-default: var(--${e}-border); - --semantic-text-default: var(--${e}-text); - --semantic-text-inverted: var(--${o}-text); - --semantic-background-default: var(--${e}-background-500); - --semantic-background-inverted: var(--${o}-background-500); - --semantic-stroke-highlight: var(--${e}-primary-500); - --semantic-text-highlight: var(--${e}-primary-500); - --semantic-background-highlight: var(--${e}-primary-500); - - --semantic-stroke-default_rgb: var(--${e}-border_rgb); - --semantic-text-default_rgb: var(--${e}-text_rgb); - --semantic-text-inverted_rgb: var(--${o}-text_rgb); - --semantic-background-default_rgb: var(--${e}-background_rgb); - --semantic-background-inverted_rgb: var(--${o}-background_rgb); - --semantic-stroke-highlight_rgb: var(--${e}-primary_rgb); - --semantic-text-highlight_rgb: var(--${e}-primary_rgb); - --semantic-background-highlight_rgb: var(--${e}-primary_rgb); - - --semantic-background-alternate: ${e === "dark" ? `var(--${e}-background-300)` : `var(--${e}-background-700)`}; - - --semantic-text-hover: ${e === "dark" ? `var(--${e}-primary-100)` : `var(--${e}-primary-900)`}; - - --semantic-stroke-hover: ${e === "dark" ? `var(--${e}-primary-100)` : `var(--${e}-primary-900)`}; - - - --semantic-stroke-light: ${e === "dark" ? `var(--${e}-background-200)` : `var(--${e}-background-800)`}; - - --semantic-background-hover: ${e === "dark" ? `var(--${e}-primary-100)` : `var(--${e}-primary-900)`}; - - --semantic-text-hover_rgb: ${e === "dark" ? `var(--${e}-primary-100_rgb)` : `var(--${e}-primary-900_rgb)`}; - - --semantic-stroke-hover_rgb: ${e === "dark" ? `var(--${e}-primary-100_rgb)` : `var(--${e}-primary-900_rgb)`}; - - --semantic-background-hover_rgb: ${e === "dark" ? `var(--${e}-primary-100_rgb)` : `var(--${e}-primary-900_rgb)`}; - - - `; - } - return ` - :host { - ${t("light")} - ${t("dark")} - } - - @media (prefers-color-scheme: dark) { - :host([theme='${v.AUTO}']) { - ${i("dark")} - } - } - - @media (prefers-color-scheme: light) { - :host([theme='${v.AUTO}']) { - ${i("light")} - } - } - - :host([theme='${v.LIGHT}']) { - ${i("light")} - } - - :host([theme='${v.DARK}']) { - ${i("dark")} - } - `; -} -class et extends HTMLElement { - constructor() { - super(), this.styleElement = void 0, this.defaultStyles = { - fontSizeTitle: "4.25rem", - fontSizeXxl: "2rem", - // Heading 2 / Extra Extra Large - fontSizeXl: "1.75rem", - // Heading 3 / Extra Large - fontSizeLg: "1.5rem", - // Heading 4 / Large - fontSizeMd: "1.125rem", - fontSizeSm: "0.975rem", - fontSizeXs: "0.85rem", - fontSizeDefault: "1rem", - // Default font size - fontFamilyDefault: "sans-serif", - fontFamilyHeading: "arial", - colorPrimary: "#ed1c24", - colorTextLight: "#000000", - colorTextDark: "#ffffff", - colorBackgroundLight: "#ffffff", - colorBackgroundDark: "#000000", - cardMediaSizeSmall: "24px", - // Card media size small - cardMediaSizeMedium: "64px", - // Card media size medium - cardMediaSizeLarge: "128px", - // Card media size large - appBarHeight: "64px", - bottomNavigationHeight: "72px" - }, this.shadow = this.attachShadow({ mode: "open" }); - const t = document.createElement("slot"); - this.shadow.append(t), this.updateStyles(); - } - static get observedAttributes() { - return [ - "font-family-heading", - "font-family-default", - "font-size-title", - "font-size-xxl", - "font-size-xl", - "font-size-lg", - "font-size-md", - "font-size-sm", - "font-size-default", - "color-primary", - "color-text-dark", - "color-background-dark", - "color-text-light", - "color-background-light", - "card-media-size-sm", - "card-media-size-md", - "card-media-size-lg", - "app-bar-height", - "bottom-navigation-height" - ]; - } - attributeChangedCallback() { - this.updateStyles(); - } - updateStyles() { - const t = this.getAttribute("font-size-title") || this.defaultStyles.fontSizeTitle, i = this.getAttribute("font-size-xxl") || this.defaultStyles.fontSizeXxl, e = this.getAttribute("font-size-xl") || this.defaultStyles.fontSizeXl, o = this.getAttribute("font-size-lg") || this.defaultStyles.fontSizeLg, a = this.getAttribute("font-size-md") || this.defaultStyles.fontSizeMd, r = this.getAttribute("font-size-sm") || this.defaultStyles.fontSizeSm, c = this.getAttribute("font-size-xs") || this.defaultStyles.fontSizeXs, u = this.getAttribute("font-size-default") || this.defaultStyles.fontSizeDefault, f = this.getAttribute("font-family-default") || this.defaultStyles.fontFamilyDefault, k = this.getAttribute("font-family-heading") || this.defaultStyles.fontFamilyHeading, E = this.getAttribute("color-primary") || this.defaultStyles.colorPrimary, A = this.getAttribute("color-text-light") || this.defaultStyles.colorTextLight, C = this.getAttribute("color-text-dark") || this.defaultStyles.colorTextDark, G = this.getAttribute("color-background-light") || this.defaultStyles.colorBackgroundLight, X = this.getAttribute("color-background-dark") || this.defaultStyles.colorBackgroundDark, U = this.getAttribute("card-media-size-lg") || this.defaultStyles.cardMediaSizeLarge, K = this.getAttribute("card-media-size-md") || this.defaultStyles.cardMediaSizeMedium, W = this.getAttribute("card-media-size-sm") || this.defaultStyles.cardMediaSizeSmall, Y = this.getAttribute("app-bar-height") || this.defaultStyles.appBarHeight, V = this.getAttribute("bottom-navigation-height") || this.defaultStyles.bottomNavigationHeight, Q = Z( - E, - // Primary color - A, - // Light mode text color - G, - // Light mode background color - C, - // Dark mode text color - X - // Dark mode background color - ), J = tt(Q); - this.styleElement && this.shadow.removeChild(this.styleElement), this.styleElement = document.createElement("style"), this.styleElement.textContent = ` - :host { - display: flex; - margin: 0; - padding: 0; - box-sizing: border-box; - height: 100%; - width: 100%; - - --${l()}-shadow-light: 0 2px 4px rgba(0,0,0,0.05); - --${l()}-shadow-dark: 0 2px 4px rgba(0,0,0,0.3); - - --${l()}-font-family-default: ${f}; - --${l()}-font-family-heading: ${k}; - --${l()}-font-size-default: ${u}; - --${l()}-font-size-title: ${t}; - --${l()}-font-size-xxl: ${i}; - --${l()}-font-size-xl: ${e}; - --${l()}-font-size-lg: ${o}; - --${l()}-font-size-md: ${a}; - --${l()}-font-size-sm: ${r}; - --${l()}-font-size-xs: ${c}; - - --${l()}-border-xs: 4px; - --${l()}-border-sm: 15px; - - /* Spacing Variables */ - --${l()}-spacing-xs: 4px; - --${l()}-spacing-sm: 8px; - --${l()}-spacing-md: 16px; - --${l()}-spacing-lg: 20px; - --${l()}-spacing-xl: 24px; - --${l()}-spacing-2xl: 28px; - --${l()}-spacing-3xl: 32px; - --${l()}-spacing-4xl: 48px; - --${l()}-spacing-5xl: 56px; - - /* Media Sizes */ - --${l()}-card-media-size-sm: ${W}; - --${l()}-card-media-size-md: ${K}; - --${l()}-card-media-size-lg: ${U}; - - --${l()}-app-bar-height: ${Y}; - --${l()}-bottom-navigation-height: ${V}; - } - - @media (min-width: ${m.MD}px) { - :host { - /* Desktop Spacing Variables in rem */ - --${l()}-spacing-xs: 8px; - --${l()}-spacing-sm: 16px; - --${l()}-spacing-md: 24px; - --${l()}-spacing-lg: 32px; - --${l()}-spacing-xl: 40px; - --${l()}-spacing-2xl: 48px; - --${l()}-spacing-3xl: 56px; - --${l()}-spacing-4xl: 64px; - --${l()}-spacing-5xl: 72px; - } - } - - ${J} - `, this.shadow.appendChild(this.styleElement); - } -} -d("theme", et); -async function it() { - return window.matchMedia("(display-mode: standalone)").matches || "standalone" in window.navigator && window.navigator.standalone ? !0 : "getInstalledRelatedApps" in navigator && typeof navigator.getInstalledRelatedApps == "function" ? (await navigator.getInstalledRelatedApps()).length > 0 : !1; -} -class st extends HTMLElement { - constructor() { - super(), this.installPromptEvent = null; - const t = this.attachShadow({ mode: "open" }), i = document.createElement("style"); - (async () => { - if (await it()) - return; - i.textContent = ` - :host { - display: block; - background-color: var(--semantic-background-default); - color: var(--semantic-text-default); - font-family: ${n("font-family-default")}; - width: 100%; - height: 100%; - box-sizing: border-box; - } - `, t.appendChild(i); - const e = document.createElement("slot"); - t.appendChild(e); - const o = document.querySelector( - `${l()}-container` - ); - o && (o.style.display = "none"); - const a = this.querySelector("#install"); - window.addEventListener("beforeinstallprompt", (c) => { - c.preventDefault(), this.installPromptEvent = c, a && (a.style.display = "block", a.addEventListener("click", (u) => { - u.stopPropagation(), this.installPromptEvent && (this.installPromptEvent.prompt(), this.installPromptEvent.userChoice.then((f) => { - if (f.outcome === "accepted") - console.log("User accepted the A2HS prompt"), this.showAppContainer(); - else { - console.log("User dismissed the A2HS prompt"), window.location.reload(); - return; - } - this.installPromptEvent = null, this.showAppContainer(); - })); - })); - }); - const r = this.querySelector("#no-install"); - r && r.addEventListener("click", () => { - this.showAppContainer(); - }); - })(); - } - showAppContainer() { - const t = document.querySelector( - `${l()}-container` - ); - if (t) - t.style.display = "block", this.style.display = "none"; - else - throw new Error("No app container found"); - } -} -d("install", st); -var p = /* @__PURE__ */ ((s) => (s[s.OVERLAY = 9999] = "OVERLAY", s[s.SNACKBAR = 8888] = "SNACKBAR", s[s.TOP = 10] = "TOP", s[s.DEFAULT = 0] = "DEFAULT", s[s.BOTTOM = -10] = "BOTTOM", s))(p || {}); -class ot extends HTMLElement { - constructor() { - super(); - const t = this.attachShadow({ mode: "open" }), i = document.createElement("style"); - i.textContent = ` - :host { - display: block; - width: 100%; - position: relative; /* Ensure positioning context for inner divs */ - z-index: ${p.TOP}; - } - - /* Fixed/Sticky bar styles */ - .app-bar { - width: 100%; - background-color: var(--semantic-background-highlight); - color: var(--semantic-text-inverted); - padding: ${n("spacing-sm")}; - box-sizing: border-box; - position: var(--app-bar-position, sticky); - top: 0; - left: 0; - box-shadow: ${n("shadow-dark")}; - transition: top 0.3s ease-in-out; - height: ${n("app-bar-height")}; - display: flex; - align-items: center; - } - - .spacer { - display: none; - height: ${n("app-bar-height")}; - } - - :host([fixed]) .spacer { - display: block; - } - - :host([fixed]) .app-bar { - position: fixed; - z-index: ${p.TOP}; - } - - :host([static]) .app-bar { - position: static; - } - `, t.appendChild(i); - const e = document.createElement("div"); - e.className = "spacer"; - const o = document.createElement("div"); - o.className = "app-bar"; - const a = document.createElement("slot"); - o.appendChild(a), t.appendChild(e), t.appendChild(o); - } - static get observedAttributes() { - return ["fixed", "static"]; - } -} -d("app-bar", ot); -class nt extends HTMLElement { - constructor() { - super(); - const t = this.attachShadow({ mode: "open" }), i = document.createElement("style"); - i.textContent = ` - :host { - align-items: center; - border: 1px solid var(--semantic-stroke-default); - border-radius: ${n("border-sm")}; - display: flex; - justify-content: center; - text-align: center; - text-decoration: none; - text-overflow: ellipsis; - transition: background-color .1s, color .1s, border-color .1s; - white-space: nowrap; - width: max-content; - height: max-content; - } - - :host(:hover), - :host([active]) { - color: var(--semantic-text-inverted); - background-color: var(--semantic-stroke-highlight); - } - - :host([size="small"]) { - font-size: ${n("font-size-sm")}; - padding-block: ${n("spacing-xs")}; - padding-inline: ${n("spacing-sm")}; - } - - :host([size="large"]) { - font-size: ${n("font-size-md")}; - padding-block: ${n("spacing-sm")}; - padding-inline: ${n("spacing-md")}; - } - `, t.appendChild(i), this.chipContent = document.createElement("div"), t.appendChild(this.chipContent), this.updateContent(), this.hasAttribute("size") || this.setAttribute("size", "small"); - } - // Observe changes to 'value' and 'active' attributes - static get observedAttributes() { - return ["value", "active", "size"]; - } - // Handle changes to attributes - attributeChangedCallback(t, i, e) { - t === "value" && i !== e ? this.updateContent() : t === "active" && i !== e ? this.updateActiveState() : t === "size" && i !== e && this.updateSize(); - } - updateContent() { - this.chipContent.textContent = this.value; - } - updateActiveState() { - this.active ? this.setAttribute("active", "") : this.removeAttribute("active"); - } - updateSize() { - this.size ? this.setAttribute("size", this.size) : this.removeAttribute("size"); - } - set active(t) { - t ? this.setAttribute("active", "") : this.removeAttribute("active"); - } - get active() { - return this.hasAttribute("active"); - } - set value(t) { - this.setAttribute("value", t); - } - get value() { - return this.getAttribute("value") || ""; - } - set size(t) { - this.setAttribute("size", t); - } - get size() { - return this.getAttribute("size") || "small"; - } -} -d("chip", nt); -class D extends Error { - constructor(t, i) { - super( - `${t.tagName.toLowerCase()} can only have the following direct children: ${i.join( - ", " - )}` - ); - } -} -class at extends HTMLElement { - constructor() { - super(); - const t = this.attachShadow({ mode: "open" }), i = document.createElement("style"); - i.textContent = ` - :host { - width: 100%; - } - - :host table { - width: 100%; - border: 0; - border-spacing: 0; - } - - :host table th { - border-bottom: 2px solid rgba(var(--semantic-stroke-highlight_rgb), 0.4); - color: var(--semantic-text-default); - } - - :host table th, :host table td { - text-align: left; - border-collapse: collapse; - padding: ${n("spacing-xs")}; - border-right: 1px solid var(--semantic-stroke-default); - color: var(--semantic-text-default); - } - - :host table > tbody > tr > td { - border-bottom: 1px solid var(--semantic-stroke-default); - color: var(--semantic-text-default); - } - - :host table tbody > tr:hover { - background-color: rgba(var(--semantic-stroke-highlight_rgb), 0.05); - } - - :host table tr:last-child td { - border-bottom: 0; - } - - :host table tr td:last-child, table tr th:last-child { - border-right: 0; - } - `, this.setAttribute("stretch-horizontal", ""), t.appendChild(i); - const e = this.querySelector("table"); - if (!e) - throw new D(this, ["table"]); - t.appendChild(e); - } -} -d("table", at); -const P = class x extends HTMLElement { - constructor() { - super(), this.isTooltipVisible = !1, this.repositionScheduled = !1; - const t = this.attachShadow({ mode: "open" }); - this.tooltip = document.createElement("div"), this.tooltip.classList.add("tooltip"); - const i = document.createElement("style"); - i.textContent = ` - .tooltip { - position: absolute; - background-color: rgba(var(--semantic-background-inverted_rgb), 0.9); - color: var(--semantic-text-inverted); - padding: ${n("spacing-sm")}; - border-radius: ${n("border-xs")}; - font-size: ${n("font-size-small")}; - z-index: ${p.OVERLAY}; - white-space: nowrap; - visibility: hidden; - opacity: 0; - transition: opacity 0.2s ease-in-out; - pointer-events: none; - transform: translateY(-100%); - } - - .tooltip[visible="true"] { - visibility: visible; - opacity: 1; - } - `, t.append(i, this.tooltip); - const e = document.createElement("slot"); - t.appendChild(e), this.addEventListener("mouseenter", this.showTooltip.bind(this)), this.addEventListener("mouseleave", this.hideTooltip.bind(this)), this.addEventListener("touchstart", this.toggleTooltip.bind(this)), document.addEventListener("click", this.handleOutsideClick.bind(this)), window.addEventListener("scroll", this.scheduleReposition.bind(this)); - } - connectedCallback() { - this.tooltip.textContent = this.getAttribute("text") || "Tooltip content"; - } - disconnectedCallback() { - document.removeEventListener("click", this.handleOutsideClick.bind(this)), window.removeEventListener("scroll", this.scheduleReposition.bind(this)); - } - showTooltip() { - this.isTooltipVisible || (x.activeTooltips.forEach((t) => { - t !== this && t.isTooltipVisible && t.hideTooltip(); - }), x.activeTooltips.push(this), this.tooltip.textContent = this.getAttribute("text") || "Tooltip content", this.repositionTooltip(), this.tooltip.setAttribute("visible", "true"), this.isTooltipVisible = !0, this.touchTimeout && clearTimeout(this.touchTimeout), this.touchTimeout = window.setTimeout(() => this.hideTooltip(), 3e3)); - } - hideTooltip() { - this.tooltip.removeAttribute("visible"), this.isTooltipVisible = !1; - const t = x.activeTooltips.indexOf(this); - t !== -1 && x.activeTooltips.splice(t, 1), clearTimeout(this.touchTimeout); - } - toggleTooltip(t) { - t.preventDefault(), this.isTooltipVisible ? this.hideTooltip() : this.showTooltip(); - } - handleOutsideClick(t) { - this.contains(t.target) || this.hideTooltip(); - } - scheduleReposition() { - this.repositionScheduled || (this.repositionScheduled = !0, requestAnimationFrame(() => { - this.repositionTooltip(), this.repositionScheduled = !1; - })); - } - repositionTooltip() { - if (!this.isTooltipVisible) - return; - const t = this.getBoundingClientRect(), i = this.tooltip.getBoundingClientRect(), e = this.closest("div[style*='overflow']") || document.documentElement, o = e.getBoundingClientRect(), a = e.scrollTop, r = e.scrollLeft; - let c = t.top + a - o.top - i.height - 8, u = t.left + r - o.left + (t.width - i.width) / 2; - c < a && (c = t.bottom + a - o.top + 8), u < r ? u = t.left + r - o.left + t.width + 8 : u + i.width > o.width + r && (u = t.left + r - o.left - i.width - 8), c + i.height > o.height + a && (c = t.top + a - o.top - i.height - 8), this.tooltip.style.left = `${u}px`, this.tooltip.style.top = `${c}px`; - } -}; -P.activeTooltips = []; -let rt = P; -d("tooltip", rt); -function b() { - return ` - :host([stretch-vertical]) { - height: 100%; - } - - :host([stretch-horizontal]) { - width: 100%; - } - `; -} -class M extends HTMLElement { - constructor() { - super(); - const t = this.attachShadow({ mode: "open" }), i = document.createElement("style"); - i.textContent = ` - :host { - display: flex; - flex-direction: column; - width: max-content; - } - - ${b()} - - :host .container { - position: relative; - display: flex; - height: 2em; - overflow: hidden; - } - - :host .container::after { - --icon-offset: 6px; - content: '\\25BC'; - position: absolute; - top: 0; - right: 0; - padding: var(--icon-offset); - background: rgba(var(--semantic-background-inverted_rgb), 0.1); - transition: .25s all ease; - pointer-events: none; - } - - :host .container:hover::after { - color: var(--semantic-text-highlight); - } - - :host select>option { - background: var(--semantic-background-default); - } - - :host select { - --select-offset: calc(${n("spacing-sm")} + 26px); - /* Reset Select */ - appearance: none; - outline: 10px red; - border: 0; - box-shadow: none; - width: 100%; - font-size: 1em; - - /* Personalize */ - flex: 1; - padding-inline: ${n("spacing-md")}; - padding-block: 0; - color: var(--text-default); - background: rgba(var(--semantic-background-inverted_rgb), 0.1); - background-image: none; - cursor: pointer; - - padding-right: var(--select-offset); - } - `, this.select = this.querySelector("select"); - const e = document.createElement("div"); - if (e.classList.add("container"), !this.select) - throw new D(this, ["select"]); - e.append(this.select), t.append(i, e), this.select.addEventListener("change", () => { - this.dispatchSelectChange(); - }); - } - // Method to dispatch the select-change event - dispatchSelectChange() { - const t = new CustomEvent("select-change", { - detail: { value: this.select.value }, - // Directly use select value - bubbles: !0, - // Allow the event to bubble up - composed: !0 - // Allow the event to cross shadow DOM boundaries - }); - this.dispatchEvent(t); - } - // Reflect the 'value' attribute to the property - static get observedAttributes() { - return ["selected"]; - } - attributeChangedCallback(t, i, e) { - M.observedAttributes.includes(t) && i !== e && t === "selected" && (this.select.value = e || "", this.dispatchSelectChange()); - } -} -d("select", M); -class q extends HTMLElement { - constructor() { - super(); - const t = this.attachShadow({ mode: "open" }), i = document.createElement("style"); - i.textContent = ` - :host { - display: flex; - flex-direction: column; - padding: ${n("spacing-sm")}; - flex: 1; - } - `, t.appendChild(i); - const e = document.createElement("slot"); - t.appendChild(e); - } -} -d("card-content", q); -class lt extends HTMLElement { - constructor() { - super(); - const t = this.attachShadow({ mode: "open" }), i = document.createElement("style"); - i.textContent = ` - :host { - box-sizing: border-box; - border: 1px solid var(--semantic-stroke-default); - display: flex; - flex-direction: column; - overflow: hidden; - max-width: 100%; - box-shadow: ${n("shadow-light")}; - height: 100%; /* Ensure the card takes full height */ - } - - card-content { - flex: 1; /* Allows the content to grow and fill space */ - } - - card-media { - display: block; - width: 100%; - } - `, t.appendChild(i), this.querySelector("x-"); - const e = this.querySelector(`${l()}-card-content`) || this.querySelector(`${l()}-card-media`) || this.querySelector(`${l()}-card-footer`), o = document.createElement("slot"); - if (e) - t.appendChild(o); - else { - const a = new q(); - a.append(o), t.append(a); - } - } -} -d("card", lt); -class H extends HTMLElement { - constructor() { - super(); - const t = this.attachShadow({ mode: "open" }); - this.styleElement = document.createElement("style"), this.styleElement.textContent = ` - :host { - display: block; - width: 100%; - position: relative; - overflow: hidden; - } - - img, video { - width: 100%; - height: 100%; - object-fit: cover; - } - - .small { - height: ${n("card-media-size-sm")}; - } - .medium { - height: ${n("card-media-size-md")}; - } - .large { - height: ${n("card-media-size-lg")}; - } - `, t.appendChild(this.styleElement), this.mediaElement = document.createElement("div"), this.mediaElement.style.position = "relative", this.mediaElement.style.width = "100%", this.mediaElement.style.height = "100%", this.mediaElement.style.display = "flex", t.appendChild(this.mediaElement); - } - static get observedAttributes() { - return ["src", "size"]; - } - attributeChangedCallback(t, i, e) { - i !== e && H.observedAttributes.includes(t) && this.updateMedia(); - } - updateMedia() { - const t = this.getAttribute("src"), i = this.getAttribute("size") || void 0, e = this.detectMediaType(t); - if (t && e) { - this.mediaElement.innerHTML = ""; - const o = e === "image" ? document.createElement("img") : document.createElement("video"); - if (o.src = t, i && (o.className = i), e === "video") { - const a = o; - a.muted = !0, a.controls = !1, a.autoplay = !0, a.loop = !0, a.playsInline = !0, this.mediaElement.appendChild(a); - } else - this.mediaElement.appendChild(o); - } - } - detectMediaType(t) { - var e; - if (!t) - return null; - const i = (e = t.split(".").pop()) == null ? void 0 : e.toLowerCase(); - if (i) { - const o = ["jpg", "jpeg", "png", "gif", "bmp", "webp"], a = ["mp4", "webm", "ogg"]; - if (o.includes(i)) - return "image"; - if (a.includes(i)) - return "video"; - } - return null; - } - // Getters and setters for attributes - get src() { - return this.getAttribute("src"); - } - set src(t) { - t ? this.setAttribute("src", t) : this.removeAttribute("src"); - } - get size() { - return this.getAttribute("size"); - } - set size(t) { - t ? this.setAttribute("size", t) : this.removeAttribute("size"); - } -} -d("card-media", H); -class dt extends HTMLElement { - constructor() { - super(); - const t = this.attachShadow({ mode: "open" }), i = document.createElement("style"); - i.textContent = ` - :host { - display: flex; - align-items: center; - justify-content: flex-end; - padding: ${n("spacing-sm")}; - border-top: 1px solid var(--semantic-stroke-default); - background-color: var(--card-footer-background, transparent); - flex-shrink: 0; /* Prevent footer from shrinking */ - } - `, t.appendChild(i); - const e = document.createElement("slot"); - t.appendChild(e); - } -} -d("card-footer", dt); -class ct extends HTMLElement { - constructor() { - super(); - const t = this.attachShadow({ mode: "open" }), i = document.createElement("style"); - i.textContent = ` - :host { - display: inline-block; - width: 50px; - height: 50px; - overflow: hidden; - } - - :host([size="small"]) { - width: 30px; - height: 30px; - } - - :host([size="large"]) { - width: 70px; - height: 70px; - } - - svg { - width: 100%; - height: 100%; - animation: rotate 2s linear infinite; - } - - circle { - fill: none; - stroke-width: 4; - stroke: var(--semantic-stroke-highlight); - stroke-dasharray: 150, 200; - stroke-dashoffset: 0; - animation: dash 1.5s ease-in-out infinite; - } - - @keyframes rotate { - 100% { - transform: rotate(360deg); - } - } - - @keyframes dash { - 0% { - stroke-dasharray: 1, 200; - stroke-dashoffset: 0; - } - 50% { - stroke-dasharray: 100, 200; - stroke-dashoffset: -50; - } - 100% { - stroke-dasharray: 1, 200; - stroke-dashoffset: -150; - } - } - `; - const e = document.createElementNS("http://www.w3.org/2000/svg", "svg"); - e.setAttribute("viewBox", "0 0 50 50"); - const o = document.createElementNS( - "http://www.w3.org/2000/svg", - "circle" - ); - o.setAttribute("cx", "25"), o.setAttribute("cy", "25"), o.setAttribute("r", "20"), e.appendChild(o), t.appendChild(i), t.appendChild(e); - } - static get observedAttributes() { - return ["size", "color"]; - } - attributeChangedCallback(t, i, e) { - t === "size" && i !== e && this.updateSize(), t === "color" && i !== e && this.updateColor(); - } - updateSize() { - this.setAttribute("size", this.size); - } - updateColor() { - this.style.setProperty("--spinner-color", this.color); - } - set size(t) { - this.setAttribute("size", t); - } - get size() { - return this.getAttribute("size") || "small"; - } - set color(t) { - this.setAttribute("color", t); - } - get color() { - return this.getAttribute("color") || "#000"; - } -} -d("spinner", ct); -class ht extends HTMLElement { - constructor() { - super(); - const t = this.attachShadow({ mode: "open" }), i = document.createElement("style"); - i.textContent = ` - ::slotted(a) { - color: var(--semantic-text-highlight); - text-decoration: none; - } - - ::slotted(a:hover) { - color: var(--semantic-text-highlight); - text-decoration: underline; - } - - ::slotted(a:active) { - color: var(--semantic-text-highlight); - text-decoration: none; - } - - ::slotted(a:visited) { - color: var(--semantic-text-highlight); - text-decoration: none; - } - `, t.appendChild(i); - const e = document.createElement("slot"); - t.append(e); - } -} -d("text-link", ht); -class ut extends HTMLElement { - constructor() { - super(); - const t = this.attachShadow({ mode: "open" }), i = document.createElement("style"); - i.textContent = ` - ::slotted(a) { - color: inherit; - text-decoration: inherit; - font-weight: inherit; - } - - ::slotted(a:hover) { - color: inherit; - text-decoration: inherit; - font-weight: inherit; - } - - ::slotted(a:active) { - color: inherit; - text-decoration: inherit; - font-weight: inherit; - } - - ::slotted(a:visited) { - color: inherit; - text-decoration: inherit; - font-weight: inherit; - } - `, t.appendChild(i); - const e = document.createElement("slot"); - t.append(e); - } -} -d("bare-link", ut); -class y extends HTMLElement { - constructor() { - super(), this.shadow = this.attachShadow({ mode: "open" }); - const t = document.createElement("style"); - t.textContent = ` - :host { - display: inline; - } - - /* General reset for slotted elements */ - ::slotted(h1), ::slotted(h2), ::slotted(h3), ::slotted(h4), ::slotted(h5), ::slotted(h6), - ::slotted(p) { - margin: 0; - padding: 0; - color: inherit; - text-align: inherit; - } - - :host([display="title"]) ::slotted(*), :host([display="title"]) { - font-family: ${n("font-family-heading")}; - font-size: ${n("font-size-title")}; /* Large font size */ - font-weight: 400; - line-height: 1.2; - letter-spacing: 0em; - } - - /* Heading 1 */ - :host([display="h1"]) ::slotted(*), :host([display="h1"]) { - font-family: ${n("font-family-heading")}; - font-size: ${n("font-size-xxl")}; /* Large font size */ - font-weight: 400; - line-height: 1.167; - letter-spacing: -0.01562em; - } - - /* Heading 2 */ - :host([display="h2"]) ::slotted(*), :host([display="h2"]) { - font-family: ${n("font-family-heading")}; - font-size: ${n("font-size-xl")}; /* Extra-large font size */ - font-weight: 300; - line-height: 1.2; - letter-spacing: -0.00833em; - } - - /* Heading 3 */ - :host([display="h3"]) ::slotted(*), :host([display="h3"]) { - font-family: ${n("font-family-heading")}; - font-size: ${n("font-size-lg")}; /* Large font size */ - font-weight: 400; - line-height: 1.167; - letter-spacing: 0em; - } - - /* Heading 4 */ - :host([display="h4"]) ::slotted(*), :host([display="h4"]) { - font-family: ${n("font-family-heading")}; - font-size: ${n("font-size-md")}; /* Medium font size */ - font-weight: 400; - line-height: 1.235; - letter-spacing: 0.00735em; - } - - /* Heading 5 */ - :host([display="h5"]) ::slotted(*), :host([display="h5"]) { - font-family: ${n("font-family-heading")}; - font-size: ${n("font-size-sm")}; /* Small font size */ - font-weight: 400; - line-height: 1.334; - letter-spacing: 0em; - } - - /* Heading 6 */ - :host([display="h6"]) ::slotted(*), :host([display="h6"]) { - font-family: ${n("font-family-heading")}; - font-size: ${n("font-size-xs")}; /* Small font size */ - font-weight: 500; - line-height: 1.6; - letter-spacing: 0.0075em; - } - - /* Subtitle 1 */ - :host([display="subtitle1"]) ::slotted(*), :host([display="subtitle1"]) { - font-family: ${n("font-family-default")}; - font-size: ${n("font-size-md")}; /* Medium font size */ - font-weight: 400; - line-height: 1.75; - letter-spacing: 0.00938em; - } - - /* Subtitle 2 */ - :host([display="subtitle2"]) ::slotted(*), :host([display="subtitle2"]) { - font-family: ${n("font-family-default")}; - font-size: ${n("font-size-sm")}; /* Small font size */ - font-weight: 500; - line-height: 1.57; - letter-spacing: 0.00714em; - } - - /* Body 1 */ - :host([display="body1"]) ::slotted(*), :host([display="body1"]) { - font-family: ${n("font-family-default")}; - font-size: ${n("font-size-default")}; /* Medium font size */ - font-weight: 400; - line-height: 1.5; - letter-spacing: 0.00938em; - } - - /* Body 2 */ - :host([display="body2"]) ::slotted(*), :host([display="body2"]) { - font-family: ${n("font-family-default")}; - font-size: ${n("font-size-sm")}; /* Small font size */ - font-weight: 400; - line-height: 1.43; - letter-spacing: 0.01071em; - } - - /* Button */ - :host([display="button"]) ::slotted(*), :host([display="button"]) { - font-family: ${n("font-family-default")}; - font-size: ${n("font-size-sm")}; /* Small font size */ - font-weight: 500; - line-height: 1.75; - letter-spacing: 0.02857em; - text-transform: uppercase; - } - - /* Caption */ - :host([display="caption"]) ::slotted(*), :host([display="caption"]) { - font-family: ${n("font-family-default")}; - font-size: ${n("font-size-sm")}; /* Extra-small font size */ - font-weight: 400; - line-height: 1.66; - letter-spacing: 0.03333em; - } - - /* Overline */ - :host([display="overline"]) ::slotted(*), :host([display="overline"]) { - font-family: ${n("font-family-default")}; - font-size: ${n("font-size-xs")}; /* Extra-small font size */ - font-weight: 400; - line-height: 2.66; - letter-spacing: 0.08333em; - text-transform: uppercase; - } - `, this.shadow.appendChild(t); - const i = document.createElement("slot"); - this.shadow.appendChild(i); - } - set display(t) { - this.setAttribute("display", t); - } - get display() { - return this.getAttribute("display") || ""; - } - static get observedAttributes() { - return ["display"]; - } -} -d("typography", y); -class pt extends HTMLElement { - constructor() { - super(); - const t = this.attachShadow({ mode: "open" }), i = document.createElement("style"); - i.textContent = ` - :host { - display: block; - background-color: var(--semantic-background-default); - color: var(--semantic-text-default); - font-family: ${n("font-family-default")}; - width: 100%; - } - `, t.appendChild(i); - const e = document.createElement("slot"); - t.append(e); - } -} -d("container", pt); -class B extends HTMLElement { - constructor() { - super(); - const t = this.attachShadow({ mode: "open" }); - this.styleElement = document.createElement("style"), t.appendChild(this.styleElement); - const i = document.createElement("slot"); - t.append(i), this.updateStyles(); - } - static get observedAttributes() { - return ["xs", "md", "lg", "xl"]; - } - attributeChangedCallback(t, i, e) { - B.observedAttributes.includes(t) && i !== e && this.updateStyles(); - } - updateStyles() { - const t = this.getAttribute("xs") || "1", i = this.getAttribute("md") || "1", e = this.getAttribute("lg") || "1", o = this.getAttribute("xl") || "1"; - this.styleElement.textContent = ` - :host { - width: 100%; - display: grid; - gap: ${n("spacing-md")}; - grid-template-columns: repeat(${t}, 1fr); - } - - @media (min-width: ${m.XS}px) { - :host([xs]) { - grid-template-columns: repeat(${t}, 1fr); - } - } - - @media (min-width: ${m.MD}px) { - :host([md]) { - grid-template-columns: repeat(${i}, 1fr); - } - } - - @media (min-width: ${m.LG}px) { - :host([lg]) { - grid-template-columns: repeat(${e}, 1fr); - } - } - - @media (min-width: ${m.XL}px) { - :host([xl]) { - grid-template-columns: repeat(${o}, 1fr); - } - } - `; - } - // Getters and setters for attributes - get xs() { - return this.getAttribute("xs"); - } - set xs(t) { - t ? this.setAttribute("xs", t) : this.removeAttribute("xs"); - } - get md() { - return this.getAttribute("md"); - } - set md(t) { - t ? this.setAttribute("md", t) : this.removeAttribute("md"); - } - get lg() { - return this.getAttribute("lg"); - } - set lg(t) { - t ? this.setAttribute("lg", t) : this.removeAttribute("lg"); - } - get xl() { - return this.getAttribute("xl"); - } - set xl(t) { - t ? this.setAttribute("xl", t) : this.removeAttribute("xl"); - } -} -d("grid", B); -function gt(s, t) { - return Object.keys(s).filter((i) => isNaN(Number(i))).map((i) => t(s[i])); -} -var _ = /* @__PURE__ */ ((s) => (s.CENTER = "center", s.LEFT = "start", s.RIGHT = "end", s.EVEN = "space-evenly", s.BETWEEN = "space-between", s))(_ || {}); -function j() { - return ` - ${gt(_, (s) => ` - :host([justify-content="${s}"]) { - justify-content: ${s}; - } - - :host([align-items="${s}"]) { - align-items: ${s}; - } - `).join("")} - `; -} -class R extends HTMLElement { - constructor() { - super(); - const t = this.attachShadow({ mode: "open" }); - this.styleElement = document.createElement("style"), t.appendChild(this.styleElement); - const i = document.createElement("slot"); - t.append(i), this.setAttribute("stretch-horizontal", ""), this.updateStyles(); - } - static get observedAttributes() { - return ["direction", "gap", "margin-inline", "margin-block", "stretch"]; - } - attributeChangedCallback(t, i, e) { - R.observedAttributes.includes(t) && i !== e && this.updateStyles(); - } - updateStyles() { - const t = this.getAttribute("direction") || "vertical", i = this.getGapVariable( - this.getAttribute("gap") || "none" - ), e = this.getMarginVariable( - this.getAttribute("margin-inline") || "none" - ), o = this.getMarginVariable( - this.getAttribute("margin-block") || "none" - ); - this.styleElement.textContent = ` - :host { - display: flex; - flex-direction: ${t === "horizontal" ? "row" : "column"}; - gap: ${i}; - padding-inline: ${e}; - padding-block: ${o}; - flex-wrap: wrap; - box-sizing: border-box; - } - - ${j()} - ${b()} - - :host([stretch][direction="horizontal"]) { - width: 100%; - } - - :host([stretch][direction="vertical"]) { - height: 100%; - } - `; - } - getGapVariable(t) { - switch (t) { - case "none": - return "0px"; - case "small": - return n("spacing-sm"); - case "medium": - return n("spacing-md"); - case "large": - return n("spacing-lg"); - case "extra-large": - return n("spacing-xl"); - default: - return n("spacing-md"); - } - } - getMarginVariable(t) { - return this.getGapVariable(t); - } - // Getters and setters for attributes - get direction() { - return this.getAttribute("direction"); - } - set direction(t) { - t ? this.setAttribute("direction", t) : this.removeAttribute("direction"); - } - get gap() { - return this.getAttribute("gap") || "none"; - } - set gap(t) { - t ? this.setAttribute("gap", t) : this.removeAttribute("gap"); - } - get marginInline() { - return this.getAttribute("margin-inline") || "none"; - } - set marginInline(t) { - t ? this.setAttribute("margin-inline", t) : this.removeAttribute("margin-inline"); - } - get marginBlock() { - return this.getAttribute("margin-block") || "none"; - } - set marginBlock(t) { - t ? this.setAttribute("margin-block", t) : this.removeAttribute("margin-block"); - } -} -d("stack", R); -class I extends HTMLElement { - constructor() { - super(); - const t = this.attachShadow({ mode: "open" }), i = document.createElement("style"); - i.textContent = ` - :host { - display: block; - overflow: auto; - } - - ${b()} - `, t.appendChild(i); - const e = document.createElement("slot"); - t.append(e); - } - static get observedAttributes() { - return ["stretch", "height", "width"]; - } - connectedCallback() { - this.hasAttribute("height") && (this.style.height = this.getAttribute("height") || "auto"), this.hasAttribute("width") && (this.style.width = this.getAttribute("width") || "auto"); - } - attributeChangedCallback(t, i, e) { - !I.observedAttributes.includes(t) || i === e || (t === "height" && (this.style.height = e || "auto"), t === "width" && (this.style.width = e || "auto")); - } -} -d("scroll-box", I); -class bt extends HTMLElement { - constructor() { - super(), this.shadow = this.attachShadow({ mode: "open" }); - const t = document.createElement("style"); - t.textContent = ` - :host { - display: inline-block; - overflow: hidden; - position: relative; - box-sizing: border-box; - } - - ::slotted(img) { - display: block; - object-fit: contain; /* Maintain aspect ratio while fitting within bounds */ - object-position: center; /* Center the image if there are empty spaces */ - max-width: 100%; - } - - :host([size="small"]) ::slotted(img) { - width: 128px; - height: auto; - } - - :host([size="medium"]) ::slotted(img) { - width: 256px; - height: auto; - } - - :host([size="large"]) ::slotted(img) { - width: 512px; - height: auto; - } - - :host([size="none"]) ::slotted(img) { - width: 100%; - height: 100%; - } - `, this.shadow.appendChild(t); - const i = document.createElement("slot"); - this.shadow.appendChild(i); - } - static get observedAttributes() { - return ["size", "width", "height"]; - } - attributeChangedCallback(t, i, e) { - i !== e && ["size", "width", "height"].includes(t) && this.updateImageSize(); - } - updateImageSize() { - const t = this.querySelector("img"), i = this.getAttribute("width") || void 0, e = this.getAttribute("height") || void 0; - i && (t.style.width = i), e && (t.style.height = e); - } -} -d("figure", bt); -class mt extends HTMLElement { - constructor() { - super(); - const t = document.createElement("style"); - t.textContent = ` - :host { - display: flex; - flex-wrap: wrap; - } - - ${b()} - `; - const i = this.attachShadow({ mode: "open" }); - i.appendChild(t); - const e = document.createElement("slot"); - i.appendChild(e); - } -} -d("block", mt); -class ft extends HTMLElement { - constructor() { - super(); - const t = this.attachShadow({ mode: "open" }); - this.button = document.createElement("button"), this.button.classList.add("button"); - const i = document.createElement("style"); - i.textContent = ` - :host { - width: max-content; - height: max-content; - } - - .button { - border: none; - border-radius: ${n("border-xs")}; - cursor: pointer; - display: inline-flex; - align-items: center; - justify-content: center; - padding: ${n("spacing-md")}; - text-align: center; - transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1), box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1), border-color 250ms cubic-bezier(0.4, 0, 0.2, 1), color 250ms cubic-bezier(0.4, 0, 0.2, 1); - white-space: nowrap; - touch-action: manipulation; /* Helps with touch interactions */ - } - - ${b()} - - :host .button { - width: 100%; - } - - :host([variant="filled"]) .button { - background-color: var(--semantic-background-highlight); - color: var(--semantic-text-inverted); - } - - :host([variant="filled"]:hover) .button, - :host([variant="filled"]:active) .button { - background-color: var(--semantic-background-hover); - color: var(--semantic-text-inverted); - box-shadow: ${n("shadow-light")}; - } - - :host([variant="outlined"]) .button { - background-color: transparent; - border: 1px solid var(--semantic-stroke-highlight); - color: var(--semantic-text-highlight); - } - - :host([variant="outlined"]:hover) .button, - :host([variant="outlined"]:active) .button { - border-color: var(--semantic-stroke-hover); - color: var(--semantic-text-hover); - background-color: rgba(var(--semantic-background-highlight_rgb), 0.1); - } - - :host([size="small"]) .button { - padding-block: ${n("spacing-xs")}; - padding-inline: ${n("spacing-sm")}; - } - - :host([size="medium"]) .button { - padding-block: ${n("spacing-sm")}; - padding-inline: ${n("spacing-md")}; - } - - :host([size="large"]) .button { - padding-block: ${n("spacing-md")}; - padding-inline: ${n("spacing-lg")}; - } - - .button:focus { - outline: 2px solid var(--button-focus-outline); - } - `, t.appendChild(i); - const e = new y(); - e.display = "button"; - const o = document.createElement("slot"); - e.append(o), this.button.appendChild(e), t.appendChild(this.button), this.hasAttribute("variant") || this.setAttribute("variant", "filled"), this.hasAttribute("size") || this.setAttribute("size", "medium"), this.button.addEventListener( - "touchstart", - this.handleTouchStart.bind(this), - { passive: !0 } - ), this.button.addEventListener("touchend", this.handleTouchEnd.bind(this), { - passive: !0 - }), this.button.addEventListener( - "touchcancel", - this.handleTouchEnd.bind(this), - { passive: !0 } - ); - } - handleTouchStart() { - this.button.classList.add("button-active"); - } - handleTouchEnd() { - this.button.classList.remove("button-active"); - } - // Observe changes to 'variant' and 'size' attributes - static get observedAttributes() { - return ["variant", "size", "stretch"]; - } - // Handle changes to attributes - attributeChangedCallback(t, i, e) { - t === "variant" && i !== e ? this.updateVariant() : t === "size" && i !== e && this.updateSize(); - } - updateVariant() { - this.setAttribute("variant", this.variant); - } - updateSize() { - this.setAttribute("size", this.size); - } - set variant(t) { - this.setAttribute("variant", t); - } - get variant() { - return this.getAttribute("variant") || "filled"; - } - set size(t) { - this.setAttribute("size", t); - } - get size() { - return this.getAttribute("size") || "medium"; - } -} -d("button", ft); -class vt extends HTMLElement { - constructor() { - super(); - const t = this.attachShadow({ mode: "open" }), i = document.createElement("style"); - i.textContent = ` - :host { - display: inline-flex; - align-items: flex-start; - } - - .toggle-switch { - width: 42px; - height: 24px; - background-color: var(--semantic-stroke-default); - border-radius: 12px; - position: relative; - transition: background-color 0.2s; - flex-shrink: 0; - cursor: pointer; - } - - .switch-knob { - width: 20px; - height: 20px; - background-color: var(--semantic-background-default); - border-radius: ${n("border-sm")}; - position: absolute; - top: 2px; - left: 2px; - transition: left 0.2s; - } - - :host([checked]) .toggle-switch { - background-color: var(--semantic-stroke-highlight); - } - - :host([checked]) .switch-knob { - left: 20px; - } - - :host([disabled]) .toggle-switch { - cursor: not-allowed; - opacity: 0.6; - } - - input { - display: none; - } - - .label { - margin-left: ${n("spacing-sm")}; - cursor: auto; - } - - .required-asterisk::after { - content: " *"; - color: red; /* Optional: To highlight the asterisk */ - } - `, t.appendChild(i), this.inputElement = document.createElement("input"), this.inputElement.type = "checkbox", t.appendChild(this.inputElement), this.toggleSwitch = document.createElement("div"), this.toggleSwitch.classList.add("toggle-switch"), t.appendChild(this.toggleSwitch), this.switchKnob = document.createElement("div"), this.switchKnob.classList.add("switch-knob"), this.toggleSwitch.appendChild(this.switchKnob), this.labelElement = new y(), this.labelElement.display = "body1", this.labelElement.classList.add("label"), t.appendChild(this.labelElement), this.toggleSwitch.addEventListener("click", () => { - this.disabled || (this.checked = !this.checked, this.dispatchEvent(new Event("change"))); - }), this.hasAttribute("checked") || (this.checked = !1), this.hasAttribute("disabled") || (this.disabled = !1), this.updateLabel(); - } - static get observedAttributes() { - return ["checked", "disabled", "name", "value", "required", "label"]; - } - attributeChangedCallback(t, i, e) { - t === "checked" && i !== e ? this.updateCheckedState() : t === "disabled" && i !== e ? this.updateDisabledState() : t === "name" && i !== e ? this.inputElement.name = e || "" : t === "value" && i !== e ? this.inputElement.value = e || "" : t === "required" && i !== e ? (this.inputElement.required = e !== null, this.updateLabel()) : t === "label" && i !== e && this.updateLabel(); - } - updateCheckedState() { - this.inputElement.checked = this.checked, this.checked ? this.setAttribute("checked", "") : this.removeAttribute("checked"); - } - updateDisabledState() { - this.inputElement.disabled = this.disabled, this.disabled ? this.setAttribute("disabled", "") : this.removeAttribute("disabled"); - } - updateLabel() { - this.labelElement.textContent = this.label, this.required ? this.labelElement.classList.add("required-asterisk") : this.labelElement.classList.remove("required-asterisk"); - } - set checked(t) { - t ? this.setAttribute("checked", "") : this.removeAttribute("checked"); - } - get checked() { - return this.hasAttribute("checked"); - } - set disabled(t) { - t ? this.setAttribute("disabled", "") : this.removeAttribute("disabled"); - } - get disabled() { - return this.hasAttribute("disabled"); - } - set name(t) { - this.setAttribute("name", t); - } - get name() { - return this.getAttribute("name") || ""; - } - set value(t) { - this.setAttribute("value", t); - } - get value() { - return this.getAttribute("value") || ""; - } - set required(t) { - t ? this.setAttribute("required", "") : this.removeAttribute("required"); - } - get required() { - return this.hasAttribute("required"); - } - set label(t) { - this.setAttribute("label", t); - } - get label() { - return this.getAttribute("label") || ""; - } - // Provide form-like behavior by returning the input element - get form() { - return this.inputElement.form; - } - // Required for form submission - get validity() { - return this.inputElement.validity; - } - get validationMessage() { - return this.inputElement.validationMessage; - } - checkValidity() { - return this.inputElement.checkValidity(); - } - reportValidity() { - return this.inputElement.reportValidity(); - } - // Support setting focus on the component - focus() { - this.inputElement.focus(); - } -} -d("switch", vt); -class xt extends HTMLElement { - constructor() { - super(); - const t = this.attachShadow({ mode: "open" }), i = document.createElement("style"); - i.textContent = ` - :host { - display: inline; - width: max-content; - position: relative; - } - - .content-wrapper { - display: inline-block; - position: relative; - } - - .badge { - position: absolute; - top: 0; - right: 0; - background-color: var(--semantic-background-highlight); - color: var(--semantic-text-inverted); - border-radius: 15px; - padding: 0 6px; - height: 20px; - display: flex; - align-items: center; - justify-content: center; - font-size: 0.75rem; - font-weight: bold; - transform: translate(75%, -50%); - z-index: 1; - } - - :host([hidden]) .badge { - display: none; - } - `, t.appendChild(i), this.contentWrapper = document.createElement("div"), this.contentWrapper.className = "content-wrapper", t.appendChild(this.contentWrapper); - const e = document.createElement("slot"); - this.contentWrapper.appendChild(e), this.badgeElement = document.createElement("span"), this.badgeElement.className = "badge", t.appendChild(this.badgeElement), this.updateBadge(); - } - static get observedAttributes() { - return ["content", "hidden"]; - } - attributeChangedCallback(t, i, e) { - t === "content" && i !== e ? this.updateBadge() : t === "hidden" && i !== e && this.updateVisibility(); - } - updateBadge() { - this.badgeElement.textContent = this.getAttribute("content") || ""; - } - updateVisibility() { - const t = this.hasAttribute("hidden"); - this.badgeElement.style.display = t ? "none" : "flex"; - } - // Property setters and getters - set content(t) { - this.setAttribute("content", t); - } - get content() { - return this.getAttribute("content") || ""; - } - set hidden(t) { - t ? this.setAttribute("hidden", "") : this.removeAttribute("hidden"); - } - get hidden() { - return this.hasAttribute("hidden"); - } -} -d("badge", xt); -class yt extends HTMLElement { - constructor() { - super(); - const t = this.attachShadow({ mode: "open" }), i = document.createElement("style"); - i.textContent = ` - :host { - display: inline-flex; - align-items: center; - gap: ${n("spacing-sm")}; - font-family: sans-serif; - width: max-content; - } - - .color-container { - position: relative; - } - - .color-preview { - width: 24px; - height: 24px; - border-radius: 50%; - border: 2px solid #ccc; - background-color: #ffffff; - box-shadow: 0 0 3px rgba(var(--semantic-background-inverted_rgb), 0.2); - cursor: pointer; - } - - .icon { - position: absolute; - bottom: 0; - right: 0; - width: 16px; /* Reduced size */ - height: 16px; /* Reduced size */ - display: flex; - align-items: center; - justify-content: center; - cursor: pointer; - background-color: var(--semantic-background-default); - border-radius: 50%; - border: 1px solid var(--semantic-stroke-default); - box-shadow: 0 0 1px rgba(var(--semantic-background-inverted_rgb), 0.3); - transform: translate(30%, 30%); /* Adjust badge position */ - pointer-events: all; - } - - .icon svg { - fill: currentColor; - width: 12px; /* Adjusted size */ - height: 12px; /* Adjusted size */ - } - - input[type="color"] { - z-index: ${p.TOP}; - opacity: 0; - position: absolute; - width: 32px; - height: 32px; - transform: translate(-1px, -1px); - cursor: pointer; - } - `, t.appendChild(i), this.colorInput = document.createElement("input"), this.colorInput.type = "color", t.appendChild(this.colorInput); - const e = document.createElement("div"); - e.classList.add("color-container"), this.colorPreview = document.createElement("div"), this.colorPreview.classList.add("color-preview"), e.appendChild(this.colorPreview), this.iconElement = document.createElement("div"), this.iconElement.classList.add("icon"), this.iconElement.innerHTML = ` - - - - `, e.appendChild(this.iconElement), t.appendChild(e), this.colorInput.addEventListener( - "input", - this.handleColorChange.bind(this) - ), this.colorPreview.addEventListener("click", () => this.colorInput.click()), this.iconElement.addEventListener("click", () => this.colorInput.click()), this.updateColor(this.getAttribute("value") || "#ffffff"); - } - static get observedAttributes() { - return ["value", "label"]; - } - attributeChangedCallback(t, i, e) { - t === "value" && i !== e ? this.updateColor(e) : t === "label" && i !== e && this.updateLabel(); - } - handleColorChange(t) { - const e = t.target.value; - this.colorPreview.style.backgroundColor = e, this.dispatchEvent(new CustomEvent("color-change", { detail: { color: e } })); - } - updateColor(t) { - t = t || "#ffffff", this.value = t, this.colorPreview.style.backgroundColor = t, this.colorInput.value = t; - } - updateLabel() { - var i; - const t = this.getAttribute("label") || ""; - this.labelElement || (this.labelElement = new y(), this.labelElement.display = "body1", (i = this.shadowRoot) == null || i.appendChild(this.labelElement)), this.labelElement.textContent = t; - } - set value(t) { - this.setAttribute("value", t); - } - get value() { - return this.getAttribute("value") || "#ffffff"; - } - set label(t) { - this.setAttribute("label", t); - } - get label() { - return this.getAttribute("label") || ""; - } -} -d("color-picker", yt); -class kt extends HTMLElement { - constructor() { - super(); - const t = this.attachShadow({ mode: "open" }), i = document.createElement("style"); - i.textContent = ` - :host { - display: block; - width: 100%; - margin: 0; - box-sizing: border-box; - } - - .divider { - height: 1px; - background-color: var(--semantic-stroke-default); - margin-left: 0; - margin-right: 0; - box-sizing: border-box; - transition: background-color 0.3s; - } - - :host([vertical]) { - display: inline-block; - width: 1px; - height: 100%; /* Take up the full height of the parent */ - margin: 0; /* Remove horizontal margins for vertical divider */ - } - - :host([vertical]) .divider { - width: 1px; - height: 100%; /* Ensure it fills the parent height */ - } - - :host([light]) .divider { - background-color: var(--semantic-stroke-light); - } - - :host([fade]) .divider { - background-color: inherit; - border-bottom: 1px solid transparent; - border-image: linear-gradient(90deg,var(--semantic-stroke-highlight),transparent 50%); - border-image-slice: 1; - } - `, t.appendChild(i), this.dividerElement = document.createElement("div"), this.dividerElement.className = "divider", t.appendChild(this.dividerElement); - } - static get observedAttributes() { - return ["vertical", "light"]; - } - // Property setters and getters - set vertical(t) { - t ? this.setAttribute("vertical", "") : this.removeAttribute("vertical"); - } - get vertical() { - return this.hasAttribute("vertical"); - } - set light(t) { - t ? this.setAttribute("light", "") : this.removeAttribute("light"); - } - get light() { - return this.hasAttribute("light"); - } -} -d("divider", kt); -class wt extends HTMLElement { - constructor() { - super(); - const t = this.attachShadow({ mode: "open" }), i = document.createElement("style"); - i.textContent = ` - :host { - display: flex; - flex-wrap: wrap; - } - - ${j()} - ${b()} - - :host([margin-inline="small"]) { - padding-inline: ${n("spacing-sm")}; - } - - :host([margin-block="small"]) { - padding-block: ${n("spacing-sm")}; - } - - :host([margin-inline="medium"]) { - padding-inline: ${n("spacing-md")}; - } - - :host([margin-block="medium"]) { - padding-block: ${n("spacing-md")}; - } - - :host([margin-inline="large"]) { - padding-inline: ${n("spacing-lg")}; - } - - :host([margin-block="large"]) { - padding-block: ${n("spacing-lg")}; - } - - :host([margin-inline="extra-large"]) { - padding-inline: ${n("spacing-xl")}; - } - - :host([margin-block="extra-large"]) { - padding-block: ${n("spacing-xl")}; - } - - - :host([margin-block="extra-large"]) { - padding-block: ${n("spacing-xl")}; - } - `, t.appendChild(i); - const e = document.createElement("slot"); - t.append(e); - } - static get observedAttributes() { - return ["margin-inline", "margin-block", "justify-content", "align-items"]; - } -} -d("box", wt); -class N extends HTMLElement { - constructor() { - super(), this.toggleCheckbox = () => { - this.checkboxElement.disabled || (this.checked = !this.checkboxElement.checked, this.dispatchEvent(new Event("change"))); - }; - const t = this.attachShadow({ mode: "open" }), i = document.createElement("style"); - i.textContent = ` - :host { - display: inline-flex; - align-items: center; - gap: ${n("spacing-xs")}; - cursor: pointer; - width: max-content; - } - - :host([disabled]) { - cursor: not-allowed; - opacity: 0.5; - } - - .checkbox { - appearance: none; - width: 2em; - height: 2em; - border: 2px solid var(--semantic-stroke-default); - border-radius: ${n("border-xs")}; - background-color: transparent; - display: flex; - align-items: center; - justify-content: center; - transition: background-color 0.3s, border-color 0.3s; - cursor: pointer; - } - - .checkbox:checked { - background-color: var(--semantic-background-highlight); - border-color: var(--semantic-background-highlight); - } - - .checkbox:checked::before { - content: ""; - width: 1em; - height: 1em; - background-color: var(--semantic-background-default); - clip-path: polygon(14% 44%, 0% 65%, 50% 100%, 100% 18%, 80% 0%, 43% 62%); - } - - .checkbox:disabled { - background-color: rgba(var(--semantic-background-inverted_rgb), 0.2); - border-color: var(--semantic-stroke-default); - cursor: not-allowed; - } - `, t.appendChild(i), this.checkboxElement = document.createElement("input"), this.checkboxElement.type = "checkbox", this.checkboxElement.className = "checkbox", t.appendChild(this.checkboxElement); - const e = document.createElement("div"); - e.className = "label"; - const o = document.createElement("slot"); - e.appendChild(o), t.append(e), this.addEventListener("click", this.toggleCheckbox), this.addEventListener("pointerdown", (a) => a.preventDefault()), this.checkboxElement.addEventListener("click", (a) => { - a.stopPropagation(); - }), this.updateCheckbox(); - } - static get observedAttributes() { - return ["checked", "disabled"]; - } - attributeChangedCallback(t, i, e) { - N.observedAttributes.includes(t) && i !== e && this.updateCheckbox(); - } - updateCheckbox() { - this.checkboxElement.checked = this.hasAttribute("checked"), this.checkboxElement.disabled = this.hasAttribute("disabled"), this.checkboxElement.disabled ? this.classList.add("disabled") : this.classList.remove("disabled"); - } - // Property setters and getters - set checked(t) { - t ? this.setAttribute("checked", "") : this.removeAttribute("checked"); - } - get checked() { - return this.hasAttribute("checked"); - } - set disabled(t) { - t ? this.setAttribute("disabled", "") : this.removeAttribute("disabled"); - } - get disabled() { - return this.hasAttribute("disabled"); - } -} -d("checkbox", N); -var w = /* @__PURE__ */ ((s) => (s.HIGHLIGHT = "highlight", s.DEFAULT = "default", s.INVERTED = "inverted", s))(w || {}); -const O = class $ extends HTMLElement { - constructor() { - super(), this.shadow = this.attachShadow({ mode: "open" }); - const t = document.createElement("style"); - t.textContent = ` - :host { - display: inline-block; - overflow: hidden; - position: relative; - box-sizing: border-box; - --icon-color: var(--semantic-text-default); - } - - :host([color="${w.DEFAULT}"]) { - --icon-color: var(--semantic-text-default); - } - - :host([color="${w.INVERTED}"]) { - --icon-color: var(--semantic-text-inverted); - } - - :host([color="${w.HIGHLIGHT}"]) { - --icon-color: var(--semantic-text-highlight); - } - - svg { - fill: var(--icon-color); - display: block; - object-fit: contain; - width: 100%; - height: 100%; - } - - :host([size="small"]) { - width: 16px; - height: 16px; - } - - :host([size="medium"]) { - width: 32px; - height: 32px; - } - - :host([size="large"]) { - width: 64px; - height: 64px; - } - - :host([size="none"]) { - width: 100%; - height: 100%; - } - `, this.shadow.appendChild(t); - } - static get observedAttributes() { - return ["size", "svg"]; - } - attributeChangedCallback(t, i, e) { - i !== e && e && t === "svg" && this.loadSvg(e); - } - async loadSvg(t) { - try { - if ($.svgCache.has(t)) - this.setSvgContent($.svgCache.get(t)); - else { - const i = await fetch(t); - if (!i.ok) - throw new Error(`Failed to load SVG: ${i.statusText}`); - const e = await i.text(); - $.svgCache.set(t, e), this.setSvgContent(e); - } - } catch (i) { - console.error("Error loading SVG:", i); - } - } - setSvgContent(t) { - const i = document.createElement("div"); - i.innerHTML = t; - const e = i.querySelector("svg"); - if (e) { - if (e.removeAttribute("width"), e.removeAttribute("height"), !e.hasAttribute("viewBox")) { - const o = e.getAttribute("width") || "100", a = e.getAttribute("height") || "100"; - e.setAttribute("viewBox", `0 0 ${o} ${a}`); - } - this.shadow.appendChild(e); - } else - console.error("No valid SVG element found in the provided content."); - } -}; -O.svgCache = /* @__PURE__ */ new Map(); -let S = O; -d("icon", S); -class $t extends HTMLElement { - constructor() { - super(); - const t = this.attachShadow({ mode: "open" }), i = document.createElement("style"); - i.textContent = ` - :host { - display: block; - padding: 0; - margin: 0; - width: max-content; - } - - /* Style the slotted list (ul or ol) */ - ::slotted(ul), - ::slotted(ol) { - margin: 0; - padding: 0; - list-style-position: inside; /* Ensures the markers are inside */ - } - - /* Custom bullet styling for unordered lists */ - ::slotted(ul) { - list-style-type: disc; /* Use a bullet for unordered lists */ - } - - /* Style list items inside the slotted ul/ol */ - ::slotted(ul li), - ::slotted(ol li) { - padding: 0.5em 0; - border-bottom: 1px solid #ddd; - } - - /* Custom numbering for ordered lists */ - ::slotted(ol) { - list-style-type: decimal; /* Use numbers for ordered lists */ - counter-reset: item; /* Reset counter for custom numbering */ - } - - ::slotted(ol li) { - counter-increment: item; - } - - ::slotted(ol li::before) { - content: counters(item, ".") " "; - font-weight: bold; - margin-right: 0.5em; - } - `, t.appendChild(i); - const e = document.createElement("slot"); - t.appendChild(e); - } -} -d("list", $t); -class Et extends HTMLElement { - constructor() { - super(); - const t = this.attachShadow({ mode: "open" }), i = document.createElement("style"); - i.textContent = ` - :host { - width: 100%; - } - `, t.appendChild(i); - const e = document.createElement("slot"); - t.appendChild(e), this.initializeTabs = this.initializeTabs.bind(this); - } - connectedCallback() { - this.initializeTabs(); - } - initializeTabs() { - var o; - const t = Array.from( - this.querySelectorAll(`${l()}-tab-button`) - ), i = Array.from( - this.querySelectorAll(`${l()}-tab-panel`) - ); - if (t.length === 0 || i.length === 0) { - console.error("No tab buttons or panels found."); - return; - } - t.forEach((a) => { - const r = a.getAttribute("id"); - r && a.addEventListener("click", () => this.selectTab(r)); - }); - const e = this.getAttribute("selected") || ((o = t[0]) == null ? void 0 : o.getAttribute("id")) || ""; - e ? this.selectTab(e) : t.length > 0 && this.selectTab(t[0].getAttribute("id") || ""); - } - selectTab(t) { - const i = Array.from( - this.querySelectorAll(`${l()}-tab-button`) - ), e = Array.from( - this.querySelectorAll(`${l()}-tab-panel`) - ); - i.forEach((a) => { - a.getAttribute("id") === t ? a.setAttribute("active", "") : a.removeAttribute("active"); - }), e.forEach((a) => { - a.getAttribute("id") === t ? a.setAttribute("active", "") : a.removeAttribute("active"); - }); - const o = this.querySelector( - `${l()}-tab-buttons` - ); - o && typeof o.updateActiveIndicator == "function" && o.updateActiveIndicator(); - } -} -d("tabs", Et); -class At extends HTMLElement { - constructor() { - super(); - const t = this.attachShadow({ mode: "open" }), i = document.createElement("style"); - i.textContent = ` - :host { - display: none; - background: var(--semantic-background-default); - } - - :host([active]) { - display: block; - } - `, t.appendChild(i); - const e = document.createElement("slot"); - t.appendChild(e); - } -} -d("tab-panel", At); -class Ct extends HTMLElement { - constructor() { - super(); - const t = this.attachShadow({ mode: "open" }), i = document.createElement("style"); - i.textContent = ` - :host { - display: block; - position: relative; - overflow: hidden; - width: 100%; - } - - .tab-panel { - position: absolute; - top: 0; - left: 100%; - width: 100%; - opacity: 0; - transition: opacity 0.3s ease, transform 0.3s ease; - transform: translateX(100%); - } - - .tab-panel[active] { - position: relative; - left: 0; - opacity: 1; - transform: translateX(0%); - transition: opacity 0.3s ease, transform 0.3s ease; - } - `, t.appendChild(i); - const e = document.createElement("slot"); - t.appendChild(e); - } -} -d("tab-panels", Ct); -class zt extends HTMLElement { - constructor() { - super(); - const t = this.attachShadow({ mode: "open" }), i = document.createElement("style"); - i.textContent = ` - :host { - display: inline-flex; - justify-content: center; - align-items: center; - padding: 10px; - background: var(--tab-button-bg, transparent); - cursor: pointer; - transition: background 0.3s; - } - - :host([active]) { - font-weight: bold; - } - - :host(:hover) { - background: #e0e0e0; - } - `, t.appendChild(i); - const e = document.createElement("slot"); - t.appendChild(e); - } -} -d("tab-button", zt); -class St extends HTMLElement { - constructor() { - super(); - const t = this.attachShadow({ mode: "open" }), i = document.createElement("style"); - i.textContent = ` - :host { - position: relative; - display: flex; - border-bottom: 1px solid var(--semantic-stroke-default); - margin: 0; - padding: 0; - list-style: none; - overflow: hidden; - width: 100%; - } - - ::slotted(x-tab-button) { - flex: 1; - padding: 10px; - text-align: center; - background: transparent; - border: none; - cursor: pointer; - transition: background 0.3s; - position: relative; - z-index: 1; - } - - .active-indicator { - position: absolute; - bottom: 0; - height: 2px; - background-color: var(--tab-button-active-border-color, var(--semantic-stroke-highlight)); - transition: left 0.3s ease, width 0.3s ease; - z-index: 0; - } - `, t.appendChild(i); - const e = document.createElement("slot"); - t.appendChild(e); - const o = document.createElement("div"); - o.className = "active-indicator", t.appendChild(o); - } - connectedCallback() { - requestAnimationFrame(() => { - this.updateActiveIndicator(); - }), this.addEventListener("slotchange", () => this.updateActiveIndicator()); - } - updateActiveIndicator() { - var o, a; - const t = (o = this.shadowRoot) == null ? void 0 : o.querySelector("slot"), e = ((t == null ? void 0 : t.assignedElements()) || []).find( - (r) => r.hasAttribute("active") - ); - if (e) { - const r = (a = this.shadowRoot) == null ? void 0 : a.querySelector( - ".active-indicator" - ), c = e.getBoundingClientRect(), u = this.getBoundingClientRect(); - r.style.left = `${c.left - u.left}px`, r.style.width = `${c.width}px`; - } - } -} -d("tab-buttons", St); -class F extends HTMLElement { - constructor() { - super(), this.handleClick = () => { - if (!this.radioElement.disabled) { - const a = this.getAttribute("value") || "", r = new CustomEvent("radio-selected", { - bubbles: !0, - // Ensure it bubbles up to the RadioGroup - composed: !0, - // Allow it to pass through shadow DOM - detail: { radio: this, value: a } - // Pass the radio button and its value as detail - }); - this.dispatchEvent(r); - } - }; - const t = this.attachShadow({ mode: "open" }), i = document.createElement("style"); - i.textContent = ` - :host { - display: inline-flex; - align-items: center; - gap: ${n("spacing-xs")}; - } - - :host([disabled]) { - cursor: not-allowed; - opacity: 0.5; - } - - label { - display: inline-flex; - align-items: center; - cursor: pointer; - gap: ${n("spacing-xs")}; - } - - .radio { - appearance: none; - width: 2em; /* Adjust size */ - height: 2em; /* Adjust size */ - border: 2px solid var(--semantic-stroke-default); - border-radius: 50%; - background-color: transparent; - display: inline-flex; - align-items: center; - justify-content: center; - transition: background-color 0.3s, border-color 0.3s; - position: relative; /* Important for the inner dot */ - cursor: pointer; - transform: translateY(-3px); - } - - .radio:checked { - background-color: var(--semantic-background-highlight); - border-color: var(--semantic-background-highlight); - } - - .radio:checked::before { - content: ""; - width: 1em; /* Inner dot size */ - height: 1em; - background-color: var(--semantic-background-default); - border-radius: 50%; - position: absolute; - } - - .radio:disabled { - background-color: rgba(var(--semantic-background-inverted_rgb), 0.2); - border-color: var(--semantic-stroke-default); - } - `, t.appendChild(i); - const e = document.createElement("label"); - this.radioElement = document.createElement("input"), this.radioElement.type = "radio", this.radioElement.className = "radio", e.appendChild(this.radioElement); - const o = document.createElement("slot"); - e.appendChild(o), t.appendChild(e), this.radioElement.addEventListener("click", this.handleClick), this.updateRadio(); - } - static get observedAttributes() { - return ["checked", "disabled", "value"]; - } - attributeChangedCallback() { - this.updateRadio(); - } - updateRadio() { - this.radioElement.checked = this.hasAttribute("checked"), this.radioElement.disabled = this.hasAttribute("disabled"); - } - set checked(t) { - t ? this.setAttribute("checked", "") : this.removeAttribute("checked"); - } - get checked() { - return this.hasAttribute("checked"); - } - set disabled(t) { - t ? this.setAttribute("disabled", "") : this.removeAttribute("disabled"); - } - get disabled() { - return this.hasAttribute("disabled"); - } - set value(t) { - this.setAttribute("value", t); - } - get value() { - return this.getAttribute("value") || ""; - } -} -d("radio-button", F); -class Tt extends HTMLElement { - constructor() { - super(), this.handleRadioClick = (t) => { - const i = t.target; - i instanceof F && !i.disabled && (this.setAttribute("selected", i.value), this.dispatchEvent( - new CustomEvent("radio-selected", { - detail: { - radio: i, - value: i.value - } - }) - )); - }; - } - connectedCallback() { - this.updateRadios(), this.addEventListener("click", this.handleRadioClick); - } - attributeChangedCallback() { - this.updateSelected(); - } - updateSelected() { - this.radios = this.querySelectorAll( - `${l()}-radio-button` - ), this.radios.forEach((t) => { - t.value === this.getAttribute("selected") && (this.clearChecked(), t.checked = !0); - }); - } - static get observedAttributes() { - return ["selected"]; - } - updateRadios() { - this.radios = this.querySelectorAll( - `${l()}-radio-button` - ); - let t = !1; - this.radios.forEach((i) => { - i.checked && (t && (i.checked = !1), t = !0); - }); - } - clearChecked() { - var t; - (t = this.radios) == null || t.forEach((i) => { - i.checked = !1; - }); - } -} -d("radio-group", Tt); -class Lt extends HTMLElement { - constructor() { - super(); - const t = this.attachShadow({ mode: "open" }), i = document.createElement("style"); - i.textContent = ` - :host { - display: none; - } - `, t.appendChild(i); - const e = document.querySelector(`${l()}-loading`); - e && document.body.removeChild(e); - } -} -d("loading", Lt); -class Mt extends HTMLElement { - constructor() { - super(), this.disableScroll(); - const t = this.attachShadow({ mode: "open" }), i = document.createElement("style"); - i.textContent = ` - :host { - display: block; - width: 100vw; - height: 100vh; - background-color: var(--semantic-background-default); - color: var(--semantic-text-highlight); - position: fixed; - top: 0; - left: 0; - z-index: ${p.OVERLAY}; - opacity: 1; - transition: opacity 1s ease-in-out; - } - - :host(.hidden) { - opacity: 0; - pointer-events: none; - } - `, t.appendChild(i); - const e = document.createElement("slot"); - t.appendChild(e); - } - static get observedAttributes() { - return ["timeout"]; - } - connectedCallback() { - const t = Number.parseInt(this.getAttribute("timeout") || "3000"); - setTimeout(() => { - this.hide(); - }, t); - } - hide() { - this.classList.add("hidden"), setTimeout(() => { - this.enableScroll(); - const t = `${l()}-theme`; - document.querySelector(t).removeChild(this); - }, 1e3); - } - disableScroll() { - document.body.style.height = "100vh", document.body.style.width = "100vw", document.body.style.overflow = "hidden"; - } - enableScroll() { - document.body.style.height = "", document.body.style.width = "", document.body.style.overflow = ""; - } -} -d("splash", Mt); -var T = /* @__PURE__ */ ((s) => (s.BOTTOM_NAVIGATION = "bottom-navigation", s.APP_BAR = "app-bar", s))(T || {}); -class Ht extends HTMLElement { - constructor() { - super(), this.autoDismissTimeout = null; - const t = this.attachShadow({ mode: "open" }), i = document.createElement("style"); - i.textContent = ` - :host { - display: none; - box-sizing: border-box; - z-index: ${p.SNACKBAR}; - pointer-events: none; - width: max-content; - max-width: 100%; - position: relative; - background-color: transparent; - transition: opacity 0.3s ease, display 0.3s ease allow-discrete; - opacity: 0; - pointer-events: auto; - } - - ${b()} - - :host([fixed]) { - position: fixed; - padding: ${n("spacing-lg")}; - width: 100%; - left: 0; - right: 0; - max-width: 100%; - box-sizing: border-box; - } - - :host([visible]) { - display: block; - opacity: 1; - } - - :host([offset="${T.BOTTOM_NAVIGATION}"]) { - bottom: ${n("bottom-navigation-height")}; - } - - :host([offset="${T.APP_BAR}"]) { - top: ${n("app-bar-height")}; - } - - :host([position="right"]) { - right: 0; - left: auto; - transform: none; - } - - :host([position="left"]) { - left: 0; - right: auto; - transform: none; - } - - /* Child div for content and background */ - .snackbar-content { - box-sizing: border-box; - padding: ${n("spacing-sm")}; - background-color: var(--semantic-background-inverted); - color: var(--semantic-text-inverted); - border-radius: 4px; - box-shadow: ${n("shadow-dark")}; - display: flex; - justify-content: space-between; - align-items: center; - } - - /* Close button styles */ - .close-button { - background: transparent; - border: none; - color: var(--semantic-text-inverted); - font-size: 16px; - cursor: pointer; - margin-left: ${n("spacing-sm")}; - } - - /* Slot for message content */ - ::slotted(*) { - display: block; - flex-grow: 1; - } - - /* Hide the close button when closable is not set */ - :host([closable]) .close-button { - display: block; - } - - :host(:not([closable])) .close-button { - display: none; - } - `, t.appendChild(i); - const e = document.createElement("div"); - e.classList.add("snackbar-content"); - const o = document.createElement("slot"); - e.appendChild(o); - const a = document.createElement("button"); - a.classList.add("close-button"), a.innerHTML = "✕", a.addEventListener("click", () => { - this.visible = !1; - }), e.appendChild(a), t.appendChild(e), this.setupAutoDismiss(); - } - static get observedAttributes() { - return ["visible", "position", "timeout", "offset", "closable"]; - } - attributeChangedCallback(t, i, e) { - t === "visible" && i !== e ? this.toggleVisibility() : t === "timeout" && i !== e ? this.setupAutoDismiss() : t === "closable" && i !== e && this.updateCloseButtonVisibility(); - } - toggleVisibility() { - this.visible ? (this.classList.add("visible"), this.startAutoDismiss()) : this.classList.remove("visible"); - } - setupAutoDismiss() { - this.autoDismissTimeout && clearTimeout(this.autoDismissTimeout); - const t = this.timeout; - t > 0 && (this.autoDismissTimeout = setTimeout(() => { - this.visible = !1; - }, t)); - } - startAutoDismiss() { - this.timeout > 0 && (this.autoDismissTimeout = setTimeout(() => { - this.removeAttribute("visible"); - }, this.timeout)); - } - updateCloseButtonVisibility() { - var i; - const t = (i = this.shadowRoot) == null ? void 0 : i.querySelector( - ".close-button" - ); - t && (this.hasAttribute("closable") ? t.style.display = "block" : t.style.display = "none"); - } - // Getter and setter for 'visible' attribute - set visible(t) { - t ? (this.setAttribute("visible", ""), this.style.display = "block") : this.removeAttribute("visible"); - } - get visible() { - return this.hasAttribute("visible"); - } - // Getter and setter for 'timeout' attribute - set timeout(t) { - this.setAttribute("timeout", t.toString()); - } - get timeout() { - return parseInt(this.getAttribute("timeout") || "0", 10); - } -} -d("snackbar", Ht); -class Bt extends HTMLElement { - constructor() { - super(); - const t = this.attachShadow({ mode: "open" }), i = document.createElement("style"); - i.textContent = ` - :host { - display: block; - width: 100%; - position: relative; /* Ensure positioning context for inner divs */ - } - - /* Fixed/Sticky navigation styles */ - .bottom-nav { - width: 100%; - justify-content: space-evenly; - background-color: var(--semantic-background-alternate); - border-top: 1px solid var(--semantic-stroke-default); - color: var(--semantic-text-default); - padding: ${n("spacing-sm")}; - box-sizing: border-box; - position: var(--bottom-nav-position, sticky); - bottom: 0; - left: 0; - transition: bottom 0.3s ease-in-out; - height: ${n("bottom-navigation-height")}; - display: flex; - align-items: center; - } - - .spacer { - display: none; - height: ${n("bottom-navigation-height")}; - } - - :host([fixed]) .spacer { - display: block; - } - - :host([fixed]) { - z-index: ${p.TOP}; - } - - :host([fixed]) .bottom-nav { - position: fixed; - } - - :host([static]) .bottom-nav { - position: static; - } - `, t.appendChild(i); - const e = document.createElement("div"); - e.className = "spacer"; - const o = document.createElement("div"); - o.className = "bottom-nav"; - const a = document.createElement("slot"); - o.appendChild(a), t.appendChild(e), t.appendChild(o); - } - static get observedAttributes() { - return ["fixed", "static"]; - } -} -d("bottom-navigation", Bt); -class Rt extends HTMLElement { - constructor() { - super(), this.shadow = this.attachShadow({ mode: "open" }); - const t = document.createElement("style"); - t.textContent = ` - :host { - display: flex; - flex-direction: column; - align-items: center; - gap: ${n("spacing-xs")}; - justify-content: center; - padding: ${n("spacing-xs")}; - box-sizing: border-box; - text-align: center; - cursor: pointer; - transition: color 0.18s ease-in-out; - height: calc(${n("bottom-navigation-height")} - 4px); /* Fixed height */ - width: auto; /* Allow width to adjust based on content */ - } - - :host(:hover), :host([active]) { - color: var(--semantic-text-highlight); - } - - .icon-container { - display: flex; - align-items: center; - justify-content: center; - width: 100%; - height: 100%; /* Fixed height as a percentage of the container height */ - overflow: hidden; - } - - .icon { - object-fit: contain; /* Ensure proper scaling */ - } - - .label { - width: 100%; - text-align: center; - } - - /* Hide label if not provided */ - :host([no-label]) .label { - display: none; - } - `; - const i = this.getAttribute("svg"); - if (i) { - const o = document.createElement("div"); - o.className = "icon-container", this.icon = new S(), this.icon.setAttribute("svg", i), this.icon.setAttribute("size", "none"), this.icon.className = "icon", o.appendChild(this.icon), this.shadow.appendChild(o); - } - const e = new y(); - e.className = "label", e.setAttribute("display", "h6"), e.textContent = this.getAttribute("label") || "", this.getAttribute("label") || this.setAttribute("no-label", ""), this.shadow.appendChild(t), this.shadow.appendChild(e); - } - static get observedAttributes() { - return ["svg"]; - } - attributeChangedCallback(t, i, e) { - if (t === "svg" && i !== e) { - const o = this.shadow.querySelector(".icon-container"); - this.icon ? e ? this.icon.setAttribute("svg", e) : (o && o.removeChild(this.icon), this.icon = void 0) : e && (this.icon = new S(), this.icon.setAttribute("svg", e), this.icon.className = "icon", o && o.appendChild(this.icon)); - } - } -} -d("bottom-navigation-action", Rt); - -const DEFAULT_LOCALE = "en"; -const TRANSLATIONS = { - "app.title": { - en: "Bulls App", - de: " Bulls App" - }, - "app.offline": { - en: "You are offline, and data may be outdated.", - de: "Du bist offline, Daten sind eventuell nicht aktuell." - }, - "app.games": { - en: "Schedule", - de: "Spielplan" - }, - "app.games.tab-bulls": { - en: "Bulls", - de: "Bulls" - }, - "app.games.tab-teams": { - en: "My Teams", - de: "Meine Teams" - }, - "app.settings.my-teams": { - en: "My Teams", - de: "Meine Teams" - }, - "app.settings.games": { - en: "Games and Events", - de: "Spiele und Veranstaltungen" - }, - "app.events.no-events": { - en: "No events are scheduled at the moment", - de: "Derzeit sind keine Veranstaltungen geplant" - }, - "app.settings.showPastGames": { - en: "Show past games", - de: "Vergangene Spiele anzeigen" - }, - "app.settings.showPastEvents": { - en: "Show past event", - de: "Vergangene Veranstaltungen anzeigen" - }, - "app.settings.display": { - en: "Display", - de: "Anzeige" - }, - "app.settings.theme": { - en: "Theme", - de: "Thema" - }, - "app.settings.theme.auto": { - en: "Auto", - de: "Automatisch" - }, - "app.settings.theme.dark": { - en: "Dark", - de: "Dunkel" - }, - "app.settings.theme.light": { - en: "Light", - de: "Hell" - }, - "app.settings.language": { - en: "Language", - de: "Sprache" - }, - "app.settings.language.auto": { - en: "Auto", - de: "Automatisch" - }, - "app.settings.language.de": { - en: "German", - de: "Deutsch" - }, - "app.settings.language.en": { - en: "English", - de: "Englisch" - }, - "app.settings.reload": { - en: "Reload App?", - de: "App neu laden?" - }, - "app.games.no-games": { - en: "No games scheduled at the moment", - de: "Derzeit sind keine Spiele geplant" - }, - "app.settings.version": { - en: "App Version", - de: "App Version" - }, - "app.settings.about": { - en: "About This App", - de: "Ãœber diese App" - }, - "app.settings.legal": { - en: "This app works offline and does not store any personal data on remote servers. All data is processed and stored only on your device. The app may use external services to retrieve publicly available information, but no personal data is shared or transmitted.", - de: "Diese App funktioniert offline und speichert keine persönlichen Daten auf entfernten Servern. Alle Daten werden ausschließlich auf Ihrem Gerät verarbeitet und gespeichert. Die App kann externe Dienste nutzen, um öffentlich verfügbare Informationen abzurufen, aber keine persönlichen Daten werden geteilt oder übertragen." - }, - "app.settings.outdated": { - en: "The information provided by this app may be subject to change and could be outdated. While we strive to keep it accurate, we cannot guarantee that all data is always up to date. Please verify important information from official sources.", - de: "Die Informationen, die diese App bereitstellt, können sich ändern und möglicherweise veraltet sein. Obwohl wir uns bemühen, sie stets aktuell zu halten, können wir nicht garantieren, dass alle Daten immer auf dem neuesten Stand sind. Bitte überprüfen Sie wichtige Informationen bei offiziellen Quellen." - } -}; -function getLang() { - if (Storage.getLanguage() === "auto") { - if (navigator.languages != void 0) { - return navigator.languages[0].split("-")?.[0]; - } - return navigator.language.split("-")?.[0]; - } - return Storage.getLanguage(); -} -const defaultLocale = "en"; -function translate(key, locale) { - locale = getLang() || defaultLocale; - if (TRANSLATIONS[key] && TRANSLATIONS[key][locale]) { - return TRANSLATIONS[key][locale]; - } - if (TRANSLATIONS[key] && TRANSLATIONS[key][DEFAULT_LOCALE]) { - return TRANSLATIONS[key][DEFAULT_LOCALE]; - } - return key; -} - -class Router extends HTMLElement { - static routes = []; - constructor() { - super(); - window.addEventListener("hashchange", () => this.update()); - this.update(); - } - static unregister(route) { - this.routes = this.routes.filter((v) => v !== route); - } - static register(route) { - this.routes.push(route); - if (route.isMatchingPath()) { - route.show(); - } else { - route.hide(); - } - } - static current() { - return window.location.hash.slice(1); - } - update() { - Router.routes.forEach((route) => { - if (route.isMatchingPath()) { - route.show(); - } else { - route.hide(); - } - }); - } - connectedCallback() { - this.update(); - } - static default() { - return Router.routes.find((route) => route.isDefault); - } - static exists(path) { - return Router.routes.some((route) => route.path === path); - } -} - -class Shell extends HTMLElement { - shadow; - snackbarContainer; - constructor() { - super(); - this.shadow = this.attachShadow({ mode: "open" }); - this.shadow.innerHTML = ` - - - - - - - - -
- - - - - - - - - - - -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - `; - this.snackbarContainer = this.shadow.querySelector("#snackbar-container"); - } - connectedCallback() { - setTimeout(() => { - const splash = this.shadow.querySelector("#splash"); - if (splash) { - splash.classList.add("fade-out"); - splash.addEventListener("transitionend", () => { - splash.remove(); - this.removeAttribute("style"); - }); - } - }, 2e3); - this.networkStatusListener(); - this.activeBottomNavigation(); - } - activeBottomNavigation() { - const links = this.shadow.querySelectorAll("x-bottom-navigation > x-bare-link > a"); - if (links.length === 0) { - return; - } - const updateActiveState = () => { - const activeRoute = Router.current(); - for (const link of links) { - const linkRoute = link.href.split("#")?.[1]; - const action = link.querySelector("x-bottom-navigation-action"); - if (action) { - if (linkRoute === activeRoute) { - action.setAttribute("active", ""); - } else { - action.removeAttribute("active"); - } - } - } - }; - const initializeState = () => { - const currentHash = Router.current(); - if (!currentHash) { - window.location.hash = `#games`; - } - updateActiveState(); - }; - window.addEventListener("hashchange", updateActiveState); - window.addEventListener("popstate", updateActiveState); - initializeState(); - } - networkStatusListener() { - window.addEventListener("online", () => { - const existingSnackbar = this.snackbarContainer.querySelector("#offline-status"); - if (existingSnackbar) { - existingSnackbar.removeAttribute("visible"); - } - }); - window.addEventListener("offline", () => { - let existingSnackbar = this.snackbarContainer.querySelector("#offline-status"); - if (!existingSnackbar) { - this.snackbarContainer.innerHTML = ` - - ${translate("app.offline")} - - `; - existingSnackbar = this.snackbarContainer.querySelector("#offline-status"); - } - existingSnackbar.setAttribute("visible", ""); - }); - } -} - -const locale = getLang(); -const dateTimeFormatter = new Intl.DateTimeFormat(locale, { dateStyle: "full", timeStyle: "short" }); -const dateFormatter = new Intl.DateTimeFormat(locale, { dateStyle: "full" }); -const timeFormatter = new Intl.DateTimeFormat(locale, { timeStyle: "short" }); -function isPastDate(date) { - return date < /* @__PURE__ */ new Date(); -} - -const CACHE = {}; -const fetchApi = async (url, offlineHandler) => { - let response = CACHE[url]; - if (!response) { - try { - const networkResponse = await fetch(`${CONFIG.API_BASE}${url}`.replace(/([^:])(\/\/+)/g, "$1/")); - response = await networkResponse.json(); - CACHE[url] = response; - } catch (error) { - if (error instanceof Error && isOfflineError(error)) { - if (offlineHandler) { - return offlineHandler(); - } - } - throw error; - } - } - return response; -}; -function isOfflineError(error) { - if (error.name === "TypeError" && error.message.includes("Failed to fetch") && !window.navigator.onLine) { - return true; - } - return false; -} - -class LeagueRepository { - static async findAll() { - const apiLeagues = await fetchApi(`/api/leagues.json`, () => []); - return apiLeagues.map((v) => { - return { - id: v.slug, - name: v.name, - shortName: v.shortName - }; - }); - } - static async findById(id) { - const league = (await this.findAll()).find((league2) => league2.id === id); - if (!league) { - throw new Error(`League ${id} not found`); - } - return league; - } -} - -class TeamRepository { - static TEAM_MAPPING = { - "Hard Bulls": "hb_1", - "Hard Bulls Bandidos": "hb_2", - "Hard Bulls Bullets": "hb_3", - "Hard Barons": "hb_4_sp", - "Hard Bulls U8": "hb_1", - "Hard Bulls U10": "hb_1", - "Hard Bulls U12": "hb_1", - "Hard Bulls U13": "hb_1", - "Hard Bulls U14": "hb_1", - "Hard Bulls U15": "hb_1", - "Hard Bulls U16": "hb_1", - "Feldkirch Cardinals": "fc_1", - "Feldkirch Cardinals U8": "fc_1", - "Feldkirch Cardinals U10": "fc_1", - "Feldkirch Cardinals U12": "fc_1", - "Feldkirch Cardinals U14": "fc_1", - "Feldkirch Cardinals U16": "fc_1", - "Feldkirch Cardinals 2": "fc_1", - "Feldkirch Cardinals 3": "fc_1", - "Diving Ducks Wr. Neustadt": "dd_1", - "Vienna Wanderers": "vw_1", - "Vienna Wanderers 2": "vw_1", - "Vienna Metrostars": "vm_1", - "Vienna Metrostars 2": "vm_1", - "Schwechat Blue Bats": "bb_1", - "Traiskirchen Grasshoppers": "gh_1", - "Dornbirn Indians": "di_1", - "Dornbirn Indians 2": "di_1", - "Dornbirn Indians 3": "di_1", - "Dornbirn Indians Minis U8": "di_1", - "Dornbirn Indians Kids U10": "di_1", - "Dornbirn Little Indians U12": "di_1", - "Dornbirn Indians Ponies U14": "di_1", - "Dornbirn Legends": "di_2_sp", - "Dornbirn Redhawks": "di_3_sp", - "Dornbirn Bears": "di_4_sp", - "ASAK Athletics": "aa_1", - "Dirty Sox Graz": "ds_1", - "Kufstein Vikings": "kv_1", - "Kufstein Vikings U14": "kv_1", - "Schwaz Tigers": "st_1", - "Feldkirch Angry Balls": "fc_2_sp", - "Centurions Wels": "cw_1", - "SG Indians - Vikings U16": "di_kv_1", - "SG Indians - Bulls": "di_hb_1", - "Feldkirch Falcons": "fc_2_fp", - "Wil Pirates": "ch-wp_1", - "Baldham Boars": "de-bb_1", - "Zürich Challengers": "ch-zc_1", - "Pee Wees St. Pölten": "pw_1_fp", - "SG Crazy Chicklets - Metrostars": "cc_vw_1_fp" - }; - static async findAll() { - const teams = await fetchApi(`/api/teams.json`, () => []); - return teams.map((v) => { - return { - id: v.id, - name: v.name, - nameShort: v.nameShort, - logo: `${CONFIG.API_BASE}assets/teams/${v.logo}` - }; - }); - } - static async findByName(name) { - const teams = await TeamRepository.findAll(); - for (const team of teams) { - for (const [mappingName, mappingId] of Object.entries(TeamRepository.TEAM_MAPPING)) { - if (mappingName.trim().toLowerCase() === name.trim().toLowerCase()) { - if (team.id === mappingId) { - return team; - } - } - } - } - throw new Error(`Team ${name} not found!`); - } -} - -class FieldRepository { - static FIELD_CACHE = {}; - static async findAll() { - const apiFields = await fetchApi(`/api/fields.json`, () => []); - return apiFields.map((v) => { - return { - teams: v.teams, - location: v.location, - venue: v.venue, - image: v.image ? `${CONFIG.API_BASE}assets/fields/${v.image}` : void 0, - keywords: v.keywords - }; - }); - } - static async findByKeyword(keyword) { - let cachedField = FieldRepository.FIELD_CACHE[keyword]; - if (cachedField) { - return cachedField; - } - if (keyword.trim() === ",") { - return void 0; - } - const field = (await FieldRepository.findAll()).find((field2) => { - return field2.keywords.includes(keyword); - }) || void 0; - if (field) { - FieldRepository.FIELD_CACHE[keyword] = field; - } - return field; - } -} - -class GamesRepository { - static async findScheduledBySeasonAndLeague(season, league, onlyFutureGames) { - const apiGames = await fetchApi(`/api/seasons/${season}/${league}/games.json`, () => []); - const result = []; - for (const apiGame of apiGames) { - const gameDateTime = new Date(apiGame.date); - const includeGame = onlyFutureGames ? !isPastDate(gameDateTime) && apiGame.status === "scheduled" : true; - if (includeGame) { - result.push({ - home: await TeamRepository.findByName(apiGame.home), - away: await TeamRepository.findByName(apiGame.away), - homeScore: apiGame.homeScore, - awayScore: apiGame.awayScore, - venue: apiGame.venue ? await FieldRepository.findByKeyword(apiGame.venue) : void 0, - date: gameDateTime, - league: await LeagueRepository.findById(apiGame.league) - }); - } - } - return Object.values(result).sort((a, b) => a.date.getTime() - b.date.getTime()); - } -} - -class GamesPage extends HTMLElement { - shadow; - bullsGames = []; - noBullsGames; - noUserGames; - showPastGames; - userGames = []; - userLeagues = []; - isLoading = true; - constructor() { - super(); - this.shadow = this.attachShadow({ mode: "open" }); - } - update() { - if (this.isLoading) { - this.shadow.innerHTML = ` - - `; - } else { - this.shadow.innerHTML = ` - - - - ${translate("app.games.tab-teams")} - - - ${translate("app.games.tab-bulls")} - - - - - - - - - ${this.noUserGames ? this.renderNoGames() : this.renderGameCards(this.userGames)} - - - - - - ${this.noBullsGames ? this.renderNoGames() : this.renderGameCards(this.bullsGames)} - - - - - - - `; - } - } - renderNoGames() { - return ` - - - ${translate("app.games.no-games")} - - - `; - } - renderGameCards(games) { - return games.map((game) => { - return ` - - - `; - }).join(""); - } - connectedCallback() { - (async () => { - this.isLoading = true; - this.update(); - let update = false; - const showPastGames = Storage.getShowPastGames(); - if (this.bullsGames.length === 0 || this.showPastGames !== showPastGames) { - for (const league of CONFIG.BULLS_LEAGUES) { - this.bullsGames.push(...await GamesRepository.findScheduledBySeasonAndLeague(CONFIG.SEASON, league, !showPastGames)); - } - this.bullsGames = this.sortGames(this.bullsGames); - update = true; - } - this.noBullsGames = this.bullsGames.length === 0; - const userLeagues = Storage.getLeagues(); - if (userLeagues.length !== this.userLeagues.length || userLeagues.sort().join() !== this.userLeagues.sort().join() || this.showPastGames !== showPastGames) { - this.userLeagues = userLeagues; - const userGames = []; - for (const league of userLeagues) { - userGames.push(...await GamesRepository.findScheduledBySeasonAndLeague(CONFIG.SEASON, league, !showPastGames)); - } - this.userGames = this.sortGames(userGames); - update = true; - } - this.noUserGames = this.userGames.length === 0; - this.showPastGames = showPastGames; - this.isLoading = false; - if (update) { - this.update(); - } - })(); - } - sortGames(games) { - return games.sort((a, b) => { - if (a.date.getTime() > b.date.getTime()) { - return 1; - } - if (a.date.getTime() < b.date.getTime()) { - return -1; - } - return 0; - }); - } -} - -class GameCard extends HTMLElement { - static observedAttributes = ["home", "away", "date", "league", "venue", "background"]; - shadow; - constructor() { - super(); - this.shadow = this.attachShadow({ mode: "open" }); - this.update(); - } - attributeChangedCallback(name, oldValue, newValue) { - if (GameCard.observedAttributes.includes(name) && oldValue !== newValue) { - this.update(); - } - } - update() { - const home = this.getAttribute("home") || ""; - const away = this.getAttribute("away") || ""; - const homeLogo = this.getAttribute("homeLogo") || ""; - const awayLogo = this.getAttribute("awayLogo") || ""; - const background = this.getAttribute("background") || void 0; - const league = this.getAttribute("league") || ""; - const venue = this.getAttribute("venue") || ""; - const dateString = this.getAttribute("date") || /* @__PURE__ */ new Date("1970"); - const date = new Date(dateString); - this.shadow.innerHTML = ` - - - - - - - - - ${away} - - - ${away} - - - - - - — - - - - - - ${home} - - - ${home} - - - - - - - - - - ${dateFormatter.format(date)} - - - - - - ${timeFormatter.format(date)} - - - - - - ${venue} - - - - - ${league ? ` - - - - - ${league} - - - - - ` : ""} - - - `; - } -} - -class SettingsPage extends HTMLElement { - shadow; - leagues = []; - selectedLeagueIds = []; - constructor() { - super(); - this.shadow = this.attachShadow({ mode: "open" }); - } - update() { - this.shadow.innerHTML = ` - - - - ${translate("app.settings.my-teams")} - - - - - - - - ${translate("app.settings.games")} - - - - - - - - - - ${translate("app.settings.display")} - - - - - ${translate("app.settings.theme")} - - - - - - ${translate("app.settings.theme.auto")} - - - ${translate("app.settings.theme.light")} - - - ${translate("app.settings.theme.dark")} - - - - - - - - ${translate("app.settings.language")} - - - - - - - - - - ${translate("app.settings.about")} - - - - - ${translate("app.settings.outdated")} - - - - ${translate("app.settings.legal")} - - - - ${translate("app.settings.version")} ${"0.0.1-alpha"} - - - - - `; - this.renderMyTeamCheckboxes(this.leagues); - const languageSelect = this.shadow.querySelector("#language-select"); - languageSelect.addEventListener("select-change", (event) => { - if (Storage.getLanguage() !== event.detail.value) { - Storage.setLanguage(event.detail.value); - if (confirm(translate("app.settings.reload"))) { - window.location.reload(); - } - } - }); - languageSelect.setAttribute("selected", Storage.getLanguage()); - const showPastGamesSwitch = this.shadow.querySelector("#show-past-games"); - showPastGamesSwitch.addEventListener("change", (event) => { - Storage.setShowPastGames(event.target.checked); - }); - if (Storage.getShowPastGames()) { - showPastGamesSwitch.setAttribute("checked", "checked"); - } else { - showPastGamesSwitch.removeAttribute("checked"); - } - const showPastEventsSwitch = this.shadow.querySelector("#show-past-events"); - showPastEventsSwitch.addEventListener("change", (event) => { - Storage.setShowPastEvents(event.target.checked); - }); - if (Storage.getShowPastEvents()) { - showPastEventsSwitch.setAttribute("checked", "checked"); - } else { - showPastEventsSwitch.removeAttribute("checked"); - } - const appThemeRadioGroup = this.shadow.querySelector("#app-theme"); - appThemeRadioGroup.setAttribute("selected", Storage.getTheme()); - appThemeRadioGroup.addEventListener("radio-selected", (event) => { - Storage.setTheme(event.detail.value); - const theme = document.querySelector("x-theme"); - theme.setAttribute("theme", Storage.getTheme()); - }); - } - renderMyTeamCheckboxes(leagues) { - const container = this.shadow.querySelector("#select-my-teams"); - container.append(...leagues.map((league) => { - const checkbox = new vt(); - checkbox.setAttribute("label", league.name); - checkbox.addEventListener("change", (event) => { - if (event.target.checked) { - Storage.addLeague(league.id); - } else { - Storage.removeLeague(league.id); - } - this.selectedLeagueIds = Storage.getLeagues(); - }); - checkbox.checked = this.selectedLeagueIds.includes(league.id); - return checkbox; - })); - } - connectedCallback() { - (async () => { - this.leagues = await LeagueRepository.findAll(); - this.selectedLeagueIds.push(...Storage.getLeagues()); - this.update(); - })(); - } -} - -class Route extends HTMLElement { - static get observedAttributes() { - return ["path", "default"]; - } - lastState = null; - connectedCallback() { - Router.register(this); - if (!this.isMatchingPath()) { - this.style.display = "none"; - } - if (Router.current() === "" && this.isDefault) { - this.style.display = "block"; - } - } - disconnectedCallback() { - Router.unregister(this); - } - get path() { - return this.getAttribute("path") || ""; - } - get isDefault() { - return this.hasAttribute("default"); - } - set path(value) { - this.setAttribute("path", value); - } - isMatchingPath() { - const paths = this.path.split(",").map((p) => p.trim()); - return paths.includes(Router.current()); - } - show() { - this.style.display = "block"; - const currentState = Storage.getStateString(); - if (this.lastState !== currentState) { - this.lastState = currentState; - this.childNodes.forEach((v) => { - const clone = v.cloneNode(true); - this.replaceChild(clone, v); - }); - } - } - hide() { - this.style.display = "none"; - } -} - -class EventRepository { - static async findAll(onlyFutureEvents) { - const apiEvents = await fetchApi(`/api/events.json`, () => []); - return apiEvents.map((v) => { - return { - ...v, - logo: `${CONFIG.API_BASE}assets/events/${v.logo}`, - date: new Date(v.date) - }; - }).filter((v) => onlyFutureEvents ? !isPastDate(v.date) : true).sort((a, b) => a.date.getTime() - b.date.getTime()); - } -} - -class EventsPage extends HTMLElement { - shadow; - events = []; - noEvents; - showPastEvents; - isLoading = true; - constructor() { - super(); - this.shadow = this.attachShadow({ mode: "open" }); - } - update() { - if (this.isLoading) { - this.shadow.innerHTML = ` - - `; - } else { - this.shadow.innerHTML = ` - - - - ${this.noEvents ? this.renderNoEvents() : this.renderEventCards(this.events)} - - - - `; - } - } - renderNoEvents() { - return ` - - - ${translate("app.events.no-events")} - - - `; - } - renderEventCards(events) { - return events.map((event) => { - return ` - - - `; - }).join(""); - } - connectedCallback() { - (async () => { - let update = false; - this.isLoading = true; - this.update(); - const showPastEvents = Storage.getShowPastEvents(); - if (this.events.length === 0 || this.showPastEvents !== showPastEvents) { - this.events.push(...await EventRepository.findAll(!showPastEvents)); - update = true; - } - this.noEvents = this.events.length === 0; - this.showPastEvents = showPastEvents; - this.isLoading = false; - if (update) { - this.update(); - } - })(); - } -} - -class EventCard extends HTMLElement { - static observedAttributes = ["title", "description", "date", "venue", "logo"]; - shadow; - constructor() { - super(); - this.shadow = this.attachShadow({ mode: "open" }); - const style = document.createElement("style"); - style.textContent = ` - :host { - display: block; - width: 100%; - min-width: 370px; - } - `; - this.shadow.appendChild(style); - this.update(); - } - attributeChangedCallback(name, oldValue, newValue) { - if (EventCard.observedAttributes.includes(name) && oldValue !== newValue) { - this.update(); - } - } - update() { - const title = this.getAttribute("title") || ""; - const description = this.getAttribute("description") || void 0; - const logo = this.getAttribute("logo") || void 0; - const venue = this.getAttribute("venue"); - const dateString = this.getAttribute("date") || /* @__PURE__ */ new Date("1970"); - const date = new Date(dateString); - this.shadow.innerHTML = ` - - ${logo ? `` : ""} - - - - - ${title} - - - - - - - ${dateTimeFormatter.format(date)} - - - - - ${venue} - - - - - - - ${description ? ` - - ${description} - - ` : ""} - - - - `; - } -} - -class Splash extends HTMLElement { - constructor() { - super(); - const shadow = this.attachShadow({ mode: "open" }); - const style = document.createElement("style"); - style.textContent = ` - :host { - display: block; - width: 100vw; - height: 100vh; - color: var(--semantic-text-highlight); - position: fixed; - top: 0; - left: 0; - z-index: 999; - opacity: 1; - transition: opacity 1s ease-in-out; - pointer-events: none; - background-repeat: no-repeat; - background-size: cover; - background-position: center; - } - - /* Styles for portrait orientation */ - @media (orientation: portrait) { - :host { - background-image: url("/images/background_portrait.webp"); - } - } - - /* Styles for landscape orientation */ - @media (orientation: landscape) { - :host { - background-image: url("/images/background_landscape.webp"); - } - } - - .logo { - display: flex; - justify-content: center; - height: 100vh; - width: 100%; - align-items: center; - filter: drop-shadow(2px 10px 10px #000000); - opacity: 0; /* Start hidden */ - animation: fadeIn 1.1s ease-in forwards; /* Fast fade-in effect */ - } - - /* Fade-in animation for the logo */ - @keyframes fadeIn { - 0% { - opacity: 0; - } - 100% { - opacity: 1; - } - } - `; - shadow.appendChild(style); - const logo = document.createElement("div"); - logo.classList.add("logo"); - logo.innerHTML = ` - - `; - shadow.append(logo); - } -} - -let installPromptEvent = void 0; -async function isPWAInstalled() { - if (window.matchMedia("(display-mode: standalone)").matches || "standalone" in window.navigator && window.navigator.standalone) { - return true; - } - if ("getInstalledRelatedApps" in navigator && typeof navigator.getInstalledRelatedApps === "function") { - const relatedApps = await navigator.getInstalledRelatedApps(); - return relatedApps.length > 0; - } - return false; -} -function registerInstallPromptListener() { - window.addEventListener("beforeinstallprompt", (event) => { - event.preventDefault(); - installPromptEvent = event; - console.log("Install prompt event detected"); - }); -} -function getInstallPromptEvent(timeout = 5e3) { - return new Promise((resolve) => { - const startTime = Date.now(); - const checkEvent = () => { - if (installPromptEvent) { - resolve(installPromptEvent); - } else if (Date.now() - startTime < timeout) { - setTimeout(checkEvent, 100); - } else { - resolve(void 0); - } - }; - checkEvent(); - }); -} -function registerServiceWorker() { - if ("serviceWorker" in navigator) { - window.addEventListener("load", () => { - const swFile = "/service-worker.js"; - const scope = "/"; - navigator.serviceWorker.register(swFile, { scope, type: "module" }).then((registration) => { - console.log( - "ServiceWorker registration successful with scope: ", - registration.scope - ); - }).catch((error) => { - console.log("ServiceWorker registration failed: ", error); - }); - }); - } -} - -class Header extends HTMLElement { - shadow; - constructor() { - super(); - this.shadow = this.attachShadow({ mode: "open" }); - this.shadow.innerHTML = ` - - - - - - - - ${translate("app.title")} - - - - - - - `; - } - connectedCallback() { - (async () => { - if (await isPWAInstalled() || !await getInstallPromptEvent()) { - return; - } - const topRightElement = this.shadow.querySelector("#top-right"); - topRightElement.innerHTML = ` - - `; - const installPrompt = topRightElement.querySelector("#install"); - installPrompt.addEventListener("click", async () => { - const installPromptEvent = await getInstallPromptEvent(); - if (installPromptEvent) { - await installPromptEvent.prompt(); - installPromptEvent.userChoice.then((choiceResult) => { - if (choiceResult.outcome === "accepted") { - console.log("User accepted the A2HS prompt"); - } else { - console.log("User dismissed the A2HS prompt"); - return; - } - window.location.reload(); - return; - }); - } - }); - })(); - } -} - -class Loading extends HTMLElement { - shadow; - constructor() { - super(); - this.shadow = this.attachShadow({ mode: "open" }); - this.shadow.innerHTML = ` - - - - - - `; - } -} - -registerInstallPromptListener(); -It("x"); -Dt(); -Nt(); -const theme = document.querySelector("x-theme"); -theme.setAttribute("theme", Storage.getTheme()); -customElements.define("hb-loading", Loading); -customElements.define("hb-splash", Splash); -customElements.define("hb-route", Route); -customElements.define("hb-router", Router); -customElements.define("hb-shell", Shell); -customElements.define("hb-header", Header); -customElements.define("hb-settings-page", SettingsPage); -customElements.define("hb-games-page", GamesPage); -customElements.define("hb-events-page", EventsPage); -customElements.define("hb-game-card", GameCard); -customElements.define("hb-event-card", EventCard); -document.querySelector("x-container").append(new Shell()); -registerServiceWorker(); -//# sourceMappingURL=main.DUuuPnxD.js.map diff --git a/main.DUuuPnxD.js.map b/main.DUuuPnxD.js.map deleted file mode 100644 index 67ed979..0000000 --- a/main.DUuuPnxD.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"main.DUuuPnxD.js","sources":["../src/storage/Storage.ts","../node_modules/@arjanfrans/web-components-ui/dist/lib/main.mjs","../src/translations.ts","../src/router/Router.ts","../src/Shell.ts","../src/date.ts","../src/fetch.ts","../src/repository/LeagueRepository.ts","../src/repository/TeamRepository.ts","../src/repository/FieldRepository.ts","../src/repository/GamesRepository.ts","../src/GamesPage.ts","../src/GameCard.ts","../src/SettingsPage.ts","../src/router/Route.ts","../src/repository/EventRepository.ts","../src/EventsPage.ts","../src/EventCard.ts","../src/Splash.ts","../src/pwa/install.ts","../src/Header.ts","../src/Loading.ts","../src/main.ts"],"sourcesContent":["import { AppState } from \"./State\";\n\n\nexport class Storage {\n private static state: AppState = {\n theme: \"auto\",\n language: \"auto\",\n showPastGames: false,\n showPastEvents: false,\n leagues: []\n };\n\n public static setTheme(theme: string) {\n localStorage.setItem('theme', theme);\n Storage.state.theme = theme;\n }\n\n public static getTheme(): string {\n return Storage.state.theme;\n }\n\n public static setLanguage(language: string) {\n localStorage.setItem('language', language);\n Storage.state.language = language;\n }\n\n public static getLanguage(): string {\n return Storage.state.language;\n }\n\n public static setShowPastGames(showPastGames: boolean) {\n localStorage.setItem('showPastGames', JSON.stringify(showPastGames));\n Storage.state.showPastGames = showPastGames;\n }\n\n public static getShowPastGames(): boolean {\n return Storage.state.showPastGames;\n }\n\n public static setShowPastEvents(showPastEvents: boolean) {\n localStorage.setItem('showPastEvents', JSON.stringify(showPastEvents));\n Storage.state.showPastEvents = showPastEvents;\n }\n\n public static getShowPastEvents(): boolean {\n return Storage.state.showPastEvents;\n }\n\n public static setLeagues(leagues: string[]) {\n localStorage.setItem('leagues', JSON.stringify(leagues));\n Storage.state.leagues = leagues;\n }\n\n public static addLeague(league: string) {\n const leagues = Storage.getLeagues()\n\n if (!leagues.includes(league)) {\n leagues.push(league);\n\n Storage.setLeagues(leagues)\n }\n }\n\n public static removeLeague(league: string) {\n Storage.setLeagues(Storage.getLeagues().filter(v => v !== league))\n }\n\n public static getLeagues(): string[] {\n return Storage.state.leagues;\n }\n\n public static getStateString(): string\n {\n return JSON.stringify(this.state);\n }\n\n public static load(): void\n {\n const leagues = localStorage.getItem('leagues');\n \n Storage.state = {\n theme: localStorage.getItem('theme') || \"auto\",\n language: localStorage.getItem('language') || \"auto\",\n showPastGames: localStorage.getItem('showPastGames') === \"true\",\n showPastEvents: localStorage.getItem('showPastEvents') === \"true\",\n leagues: leagues ? JSON.parse(leagues) : []\n }\n }\n}\n\nStorage.load();","let L = \"x\", z = [];\nfunction It(s) {\n L = s;\n}\nfunction d(s, t, i) {\n z.push(() => {\n window.customElements.define(\n `${L}-${s}`,\n t,\n i\n );\n });\n}\nfunction Nt() {\n for (const s of z)\n s();\n z = [];\n}\nfunction l() {\n return L;\n}\nfunction n(s) {\n return `var(--${l()}-${s})`;\n}\nfunction Dt() {\n document.addEventListener(\"DOMContentLoaded\", function() {\n const s = `${l()}-theme`, t = document.querySelector(s);\n if (!t)\n throw new Error(`Not theme tag found: ${s}`);\n if (t.style.display !== \"none\")\n throw new Error(\n 'Theme tag needs inline style of \"display: none\" for the wait functionality to work.'\n );\n t && customElements.get(s) ? t.style.display = \"\" : customElements.whenDefined(s).then(() => {\n t.style.display = \"\";\n });\n });\n}\nvar m = /* @__PURE__ */ ((s) => (s[s.XS = 480] = \"XS\", s[s.MD = 600] = \"MD\", s[s.LG = 960] = \"LG\", s[s.XL = 1280] = \"XL\", s))(m || {}), v = /* @__PURE__ */ ((s) => (s.LIGHT = \"light\", s.DARK = \"dark\", s.AUTO = \"auto\", s))(v || {});\nfunction g(s) {\n let t = 0, i = 0, e = 0;\n return s.length === 4 ? (t = parseInt(s[1] + s[1], 16), i = parseInt(s[2] + s[2], 16), e = parseInt(s[3] + s[3], 16)) : s.length === 7 && (t = parseInt(s[1] + s[2], 16), i = parseInt(s[3] + s[4], 16), e = parseInt(s[5] + s[6], 16)), `${t}, ${i}, ${e}`;\n}\nfunction h(s, t) {\n let i = !1;\n s[0] === \"#\" && (s = s.slice(1), i = !0);\n const e = parseInt(s, 16);\n let o = (e >> 16) + t;\n o = o > 255 ? 255 : o < 0 ? 0 : o;\n let a = (e >> 8 & 255) + t;\n a = a > 255 ? 255 : a < 0 ? 0 : a;\n let r = (e & 255) + t;\n return r = r > 255 ? 255 : r < 0 ? 0 : r, (i ? \"#\" : \"\") + (16777216 + (o << 16) + (a << 8) + r).toString(16).slice(1);\n}\nfunction Z(s, t, i, e, o) {\n function a(r, c, u, f) {\n const k = f ? 60 : -60, E = g(r), A = g(c), C = g(u);\n return {\n primary: {\n 50: h(r, 100),\n 100: h(r, 70),\n 200: h(r, 50),\n 300: h(r, 30),\n 400: h(r, 20),\n 500: r,\n 600: h(r, -10),\n 700: h(r, -20),\n 800: h(r, -30),\n 900: h(r, -50)\n },\n secondary: {\n 50: h(r, -100),\n 100: h(r, -70),\n 200: h(r, -50),\n 300: h(r, -30),\n 400: h(r, -20),\n 500: h(r, -10),\n 600: h(r, -20),\n 700: h(r, -30),\n 800: h(r, -40),\n 900: h(r, -50)\n },\n background: {\n 50: h(c, 100),\n 100: h(c, 70),\n 200: h(c, 50),\n 300: h(c, 30),\n 400: h(c, 20),\n 500: c,\n 600: h(c, -10),\n 700: h(c, -20),\n 800: h(c, -30),\n 900: h(c, -50),\n 1e3: h(c, -80)\n },\n neutral: {\n background: c,\n text: u,\n border: h(c, k)\n },\n rgb: {\n primary: E,\n secondary: g(h(r, -20)),\n background: A,\n text: C,\n border: g(h(c, k))\n }\n };\n }\n return {\n light: a(\n s,\n i,\n t,\n !1\n ),\n dark: a(s, o, e, !0)\n };\n}\nfunction tt(s) {\n function t(e) {\n const { primary: o, secondary: a, neutral: r, rgb: c, background: u } = s[e];\n return `\n --${e}-primary-50: ${o[50]};\n --${e}-primary-100: ${o[100]};\n --${e}-primary-200: ${o[200]};\n --${e}-primary-300: ${o[300]};\n --${e}-primary-400: ${o[400]};\n --${e}-primary-500: ${o[500]};\n --${e}-primary-600: ${o[600]};\n --${e}-primary-700: ${o[700]};\n --${e}-primary-800: ${o[800]};\n --${e}-primary-900: ${o[900]};\n\n\n --${e}-primary-100_rgb: ${g(o[100])};\n --${e}-primary-900_rgb: ${g(o[900])};\n\n --${e}-secondary-50: ${a[50]};\n --${e}-secondary-100: ${a[100]};\n --${e}-secondary-200: ${a[200]};\n --${e}-secondary-300: ${a[300]};\n --${e}-secondary-400: ${a[400]};\n --${e}-secondary-500: ${a[500]};\n --${e}-secondary-600: ${a[600]};\n --${e}-secondary-700: ${a[700]};\n --${e}-secondary-800: ${a[800]};\n --${e}-secondary-900: ${a[900]};\n\n --${e}-background-50: ${u[50]};\n --${e}-background-100: ${u[100]};\n --${e}-background-200: ${u[200]};\n --${e}-background-300: ${u[300]};\n --${e}-background-400: ${u[400]};\n --${e}-background-500: ${u[500]};\n --${e}-background-600: ${u[600]};\n --${e}-background-700: ${u[700]};\n --${e}-background-800: ${u[800]};\n --${e}-background-900: ${u[900]};\n --${e}-background-1000: ${u[1e3]};\n\n --${e}-background: ${r.background};\n --${e}-text: ${r.text};\n --${e}-border: ${r.border};\n\n --${e}-primary_rgb: ${c.primary};\n --${e}-secondary_rgb: ${c.secondary};\n --${e}-background_rgb: ${c.background};\n --${e}-text_rgb: ${c.text};\n --${e}-border_rgb: ${c.border};\n `;\n }\n function i(e) {\n const o = e === \"light\" ? \"dark\" : \"light\";\n return `\n --semantic-stroke-default: var(--${e}-border);\n --semantic-text-default: var(--${e}-text);\n --semantic-text-inverted: var(--${o}-text);\n --semantic-background-default: var(--${e}-background-500);\n --semantic-background-inverted: var(--${o}-background-500);\n --semantic-stroke-highlight: var(--${e}-primary-500);\n --semantic-text-highlight: var(--${e}-primary-500);\n --semantic-background-highlight: var(--${e}-primary-500);\n\n --semantic-stroke-default_rgb: var(--${e}-border_rgb);\n --semantic-text-default_rgb: var(--${e}-text_rgb);\n --semantic-text-inverted_rgb: var(--${o}-text_rgb);\n --semantic-background-default_rgb: var(--${e}-background_rgb);\n --semantic-background-inverted_rgb: var(--${o}-background_rgb);\n --semantic-stroke-highlight_rgb: var(--${e}-primary_rgb);\n --semantic-text-highlight_rgb: var(--${e}-primary_rgb);\n --semantic-background-highlight_rgb: var(--${e}-primary_rgb);\n\n --semantic-background-alternate: ${e === \"dark\" ? `var(--${e}-background-300)` : `var(--${e}-background-700)`};\n \n --semantic-text-hover: ${e === \"dark\" ? `var(--${e}-primary-100)` : `var(--${e}-primary-900)`};\n \n --semantic-stroke-hover: ${e === \"dark\" ? `var(--${e}-primary-100)` : `var(--${e}-primary-900)`};\n\n \n --semantic-stroke-light: ${e === \"dark\" ? `var(--${e}-background-200)` : `var(--${e}-background-800)`};\n\n --semantic-background-hover: ${e === \"dark\" ? `var(--${e}-primary-100)` : `var(--${e}-primary-900)`};\n\n --semantic-text-hover_rgb: ${e === \"dark\" ? `var(--${e}-primary-100_rgb)` : `var(--${e}-primary-900_rgb)`};\n\n --semantic-stroke-hover_rgb: ${e === \"dark\" ? `var(--${e}-primary-100_rgb)` : `var(--${e}-primary-900_rgb)`};\n\n --semantic-background-hover_rgb: ${e === \"dark\" ? `var(--${e}-primary-100_rgb)` : `var(--${e}-primary-900_rgb)`};\n \n \n `;\n }\n return `\n :host {\n ${t(\"light\")}\n ${t(\"dark\")}\n }\n \n @media (prefers-color-scheme: dark) {\n :host([theme='${v.AUTO}']) {\n ${i(\"dark\")}\n }\n }\n \n @media (prefers-color-scheme: light) {\n :host([theme='${v.AUTO}']) {\n ${i(\"light\")}\n }\n }\n\n :host([theme='${v.LIGHT}']) {\n ${i(\"light\")}\n }\n\n :host([theme='${v.DARK}']) {\n ${i(\"dark\")}\n }\n `;\n}\nclass et extends HTMLElement {\n constructor() {\n super(), this.styleElement = void 0, this.defaultStyles = {\n fontSizeTitle: \"4.25rem\",\n fontSizeXxl: \"2rem\",\n // Heading 2 / Extra Extra Large\n fontSizeXl: \"1.75rem\",\n // Heading 3 / Extra Large\n fontSizeLg: \"1.5rem\",\n // Heading 4 / Large\n fontSizeMd: \"1.125rem\",\n fontSizeSm: \"0.975rem\",\n fontSizeXs: \"0.85rem\",\n fontSizeDefault: \"1rem\",\n // Default font size\n fontFamilyDefault: \"sans-serif\",\n fontFamilyHeading: \"arial\",\n colorPrimary: \"#ed1c24\",\n colorTextLight: \"#000000\",\n colorTextDark: \"#ffffff\",\n colorBackgroundLight: \"#ffffff\",\n colorBackgroundDark: \"#000000\",\n cardMediaSizeSmall: \"24px\",\n // Card media size small\n cardMediaSizeMedium: \"64px\",\n // Card media size medium\n cardMediaSizeLarge: \"128px\",\n // Card media size large\n appBarHeight: \"64px\",\n bottomNavigationHeight: \"72px\"\n }, this.shadow = this.attachShadow({ mode: \"open\" });\n const t = document.createElement(\"slot\");\n this.shadow.append(t), this.updateStyles();\n }\n static get observedAttributes() {\n return [\n \"font-family-heading\",\n \"font-family-default\",\n \"font-size-title\",\n \"font-size-xxl\",\n \"font-size-xl\",\n \"font-size-lg\",\n \"font-size-md\",\n \"font-size-sm\",\n \"font-size-default\",\n \"color-primary\",\n \"color-text-dark\",\n \"color-background-dark\",\n \"color-text-light\",\n \"color-background-light\",\n \"card-media-size-sm\",\n \"card-media-size-md\",\n \"card-media-size-lg\",\n \"app-bar-height\",\n \"bottom-navigation-height\"\n ];\n }\n attributeChangedCallback() {\n this.updateStyles();\n }\n updateStyles() {\n const t = this.getAttribute(\"font-size-title\") || this.defaultStyles.fontSizeTitle, i = this.getAttribute(\"font-size-xxl\") || this.defaultStyles.fontSizeXxl, e = this.getAttribute(\"font-size-xl\") || this.defaultStyles.fontSizeXl, o = this.getAttribute(\"font-size-lg\") || this.defaultStyles.fontSizeLg, a = this.getAttribute(\"font-size-md\") || this.defaultStyles.fontSizeMd, r = this.getAttribute(\"font-size-sm\") || this.defaultStyles.fontSizeSm, c = this.getAttribute(\"font-size-xs\") || this.defaultStyles.fontSizeXs, u = this.getAttribute(\"font-size-default\") || this.defaultStyles.fontSizeDefault, f = this.getAttribute(\"font-family-default\") || this.defaultStyles.fontFamilyDefault, k = this.getAttribute(\"font-family-heading\") || this.defaultStyles.fontFamilyHeading, E = this.getAttribute(\"color-primary\") || this.defaultStyles.colorPrimary, A = this.getAttribute(\"color-text-light\") || this.defaultStyles.colorTextLight, C = this.getAttribute(\"color-text-dark\") || this.defaultStyles.colorTextDark, G = this.getAttribute(\"color-background-light\") || this.defaultStyles.colorBackgroundLight, X = this.getAttribute(\"color-background-dark\") || this.defaultStyles.colorBackgroundDark, U = this.getAttribute(\"card-media-size-lg\") || this.defaultStyles.cardMediaSizeLarge, K = this.getAttribute(\"card-media-size-md\") || this.defaultStyles.cardMediaSizeMedium, W = this.getAttribute(\"card-media-size-sm\") || this.defaultStyles.cardMediaSizeSmall, Y = this.getAttribute(\"app-bar-height\") || this.defaultStyles.appBarHeight, V = this.getAttribute(\"bottom-navigation-height\") || this.defaultStyles.bottomNavigationHeight, Q = Z(\n E,\n // Primary color\n A,\n // Light mode text color\n G,\n // Light mode background color\n C,\n // Dark mode text color\n X\n // Dark mode background color\n ), J = tt(Q);\n this.styleElement && this.shadow.removeChild(this.styleElement), this.styleElement = document.createElement(\"style\"), this.styleElement.textContent = `\n :host {\n display: flex;\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n height: 100%;\n width: 100%;\n\n --${l()}-shadow-light: 0 2px 4px rgba(0,0,0,0.05);\n --${l()}-shadow-dark: 0 2px 4px rgba(0,0,0,0.3);\n\n --${l()}-font-family-default: ${f};\n --${l()}-font-family-heading: ${k};\n --${l()}-font-size-default: ${u};\n --${l()}-font-size-title: ${t};\n --${l()}-font-size-xxl: ${i};\n --${l()}-font-size-xl: ${e};\n --${l()}-font-size-lg: ${o};\n --${l()}-font-size-md: ${a};\n --${l()}-font-size-sm: ${r};\n --${l()}-font-size-xs: ${c};\n\n --${l()}-border-xs: 4px;\n --${l()}-border-sm: 15px;\n\n /* Spacing Variables */\n --${l()}-spacing-xs: 4px; \n --${l()}-spacing-sm: 8px; \n --${l()}-spacing-md: 16px; \n --${l()}-spacing-lg: 20px; \n --${l()}-spacing-xl: 24px; \n --${l()}-spacing-2xl: 28px; \n --${l()}-spacing-3xl: 32px; \n --${l()}-spacing-4xl: 48px; \n --${l()}-spacing-5xl: 56px; \n\n /* Media Sizes */\n --${l()}-card-media-size-sm: ${W};\n --${l()}-card-media-size-md: ${K};\n --${l()}-card-media-size-lg: ${U};\n\n --${l()}-app-bar-height: ${Y};\n --${l()}-bottom-navigation-height: ${V};\n }\n\n @media (min-width: ${m.MD}px) {\n :host {\n /* Desktop Spacing Variables in rem */\n --${l()}-spacing-xs: 8px; \n --${l()}-spacing-sm: 16px; \n --${l()}-spacing-md: 24px; \n --${l()}-spacing-lg: 32px; \n --${l()}-spacing-xl: 40px; \n --${l()}-spacing-2xl: 48px; \n --${l()}-spacing-3xl: 56px; \n --${l()}-spacing-4xl: 64px; \n --${l()}-spacing-5xl: 72px; \n }\n }\n\n ${J}\n `, this.shadow.appendChild(this.styleElement);\n }\n}\nd(\"theme\", et);\nasync function it() {\n return window.matchMedia(\"(display-mode: standalone)\").matches || \"standalone\" in window.navigator && window.navigator.standalone ? !0 : \"getInstalledRelatedApps\" in navigator && typeof navigator.getInstalledRelatedApps == \"function\" ? (await navigator.getInstalledRelatedApps()).length > 0 : !1;\n}\nclass st extends HTMLElement {\n constructor() {\n super(), this.installPromptEvent = null;\n const t = this.attachShadow({ mode: \"open\" }), i = document.createElement(\"style\");\n (async () => {\n if (await it())\n return;\n i.textContent = `\n :host {\n display: block;\n background-color: var(--semantic-background-default);\n color: var(--semantic-text-default);\n font-family: ${n(\"font-family-default\")};\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n }\n `, t.appendChild(i);\n const e = document.createElement(\"slot\");\n t.appendChild(e);\n const o = document.querySelector(\n `${l()}-container`\n );\n o && (o.style.display = \"none\");\n const a = this.querySelector(\"#install\");\n window.addEventListener(\"beforeinstallprompt\", (c) => {\n c.preventDefault(), this.installPromptEvent = c, a && (a.style.display = \"block\", a.addEventListener(\"click\", (u) => {\n u.stopPropagation(), this.installPromptEvent && (this.installPromptEvent.prompt(), this.installPromptEvent.userChoice.then((f) => {\n if (f.outcome === \"accepted\")\n console.log(\"User accepted the A2HS prompt\"), this.showAppContainer();\n else {\n console.log(\"User dismissed the A2HS prompt\"), window.location.reload();\n return;\n }\n this.installPromptEvent = null, this.showAppContainer();\n }));\n }));\n });\n const r = this.querySelector(\"#no-install\");\n r && r.addEventListener(\"click\", () => {\n this.showAppContainer();\n });\n })();\n }\n showAppContainer() {\n const t = document.querySelector(\n `${l()}-container`\n );\n if (t)\n t.style.display = \"block\", this.style.display = \"none\";\n else\n throw new Error(\"No app container found\");\n }\n}\nd(\"install\", st);\nvar p = /* @__PURE__ */ ((s) => (s[s.OVERLAY = 9999] = \"OVERLAY\", s[s.SNACKBAR = 8888] = \"SNACKBAR\", s[s.TOP = 10] = \"TOP\", s[s.DEFAULT = 0] = \"DEFAULT\", s[s.BOTTOM = -10] = \"BOTTOM\", s))(p || {});\nclass ot extends HTMLElement {\n constructor() {\n super();\n const t = this.attachShadow({ mode: \"open\" }), i = document.createElement(\"style\");\n i.textContent = `\n :host {\n display: block;\n width: 100%;\n position: relative; /* Ensure positioning context for inner divs */\n z-index: ${p.TOP};\n }\n\n /* Fixed/Sticky bar styles */\n .app-bar {\n width: 100%;\n background-color: var(--semantic-background-highlight);\n color: var(--semantic-text-inverted);\n padding: ${n(\"spacing-sm\")};\n box-sizing: border-box;\n position: var(--app-bar-position, sticky);\n top: 0;\n left: 0;\n box-shadow: ${n(\"shadow-dark\")};\n transition: top 0.3s ease-in-out;\n height: ${n(\"app-bar-height\")};\n display: flex;\n align-items: center;\n }\n\n .spacer {\n display: none;\n height: ${n(\"app-bar-height\")};\n }\n \n :host([fixed]) .spacer {\n display: block;\n }\n\n :host([fixed]) .app-bar {\n position: fixed;\n z-index: ${p.TOP};\n }\n\n :host([static]) .app-bar {\n position: static;\n }\n `, t.appendChild(i);\n const e = document.createElement(\"div\");\n e.className = \"spacer\";\n const o = document.createElement(\"div\");\n o.className = \"app-bar\";\n const a = document.createElement(\"slot\");\n o.appendChild(a), t.appendChild(e), t.appendChild(o);\n }\n static get observedAttributes() {\n return [\"fixed\", \"static\"];\n }\n}\nd(\"app-bar\", ot);\nclass nt extends HTMLElement {\n constructor() {\n super();\n const t = this.attachShadow({ mode: \"open\" }), i = document.createElement(\"style\");\n i.textContent = `\n :host {\n align-items: center;\n border: 1px solid var(--semantic-stroke-default);\n border-radius: ${n(\"border-sm\")};\n display: flex;\n justify-content: center;\n text-align: center;\n text-decoration: none;\n text-overflow: ellipsis;\n transition: background-color .1s, color .1s, border-color .1s;\n white-space: nowrap;\n width: max-content;\n height: max-content;\n }\n\n :host(:hover),\n :host([active]) {\n color: var(--semantic-text-inverted);\n background-color: var(--semantic-stroke-highlight);\n }\n \n :host([size=\"small\"]) {\n font-size: ${n(\"font-size-sm\")};\n padding-block: ${n(\"spacing-xs\")};\n padding-inline: ${n(\"spacing-sm\")};\n }\n \n :host([size=\"large\"]) {\n font-size: ${n(\"font-size-md\")};\n padding-block: ${n(\"spacing-sm\")};\n padding-inline: ${n(\"spacing-md\")};\n }\n `, t.appendChild(i), this.chipContent = document.createElement(\"div\"), t.appendChild(this.chipContent), this.updateContent(), this.hasAttribute(\"size\") || this.setAttribute(\"size\", \"small\");\n }\n // Observe changes to 'value' and 'active' attributes\n static get observedAttributes() {\n return [\"value\", \"active\", \"size\"];\n }\n // Handle changes to attributes\n attributeChangedCallback(t, i, e) {\n t === \"value\" && i !== e ? this.updateContent() : t === \"active\" && i !== e ? this.updateActiveState() : t === \"size\" && i !== e && this.updateSize();\n }\n updateContent() {\n this.chipContent.textContent = this.value;\n }\n updateActiveState() {\n this.active ? this.setAttribute(\"active\", \"\") : this.removeAttribute(\"active\");\n }\n updateSize() {\n this.size ? this.setAttribute(\"size\", this.size) : this.removeAttribute(\"size\");\n }\n set active(t) {\n t ? this.setAttribute(\"active\", \"\") : this.removeAttribute(\"active\");\n }\n get active() {\n return this.hasAttribute(\"active\");\n }\n set value(t) {\n this.setAttribute(\"value\", t);\n }\n get value() {\n return this.getAttribute(\"value\") || \"\";\n }\n set size(t) {\n this.setAttribute(\"size\", t);\n }\n get size() {\n return this.getAttribute(\"size\") || \"small\";\n }\n}\nd(\"chip\", nt);\nclass D extends Error {\n constructor(t, i) {\n super(\n `${t.tagName.toLowerCase()} can only have the following direct children: ${i.join(\n \", \"\n )}`\n );\n }\n}\nclass at extends HTMLElement {\n constructor() {\n super();\n const t = this.attachShadow({ mode: \"open\" }), i = document.createElement(\"style\");\n i.textContent = `\n :host {\n width: 100%;\n }\n \n :host table {\n width: 100%;\n border: 0;\n border-spacing: 0;\n }\n\n :host table th {\n border-bottom: 2px solid rgba(var(--semantic-stroke-highlight_rgb), 0.4);\n color: var(--semantic-text-default);\n }\n\n :host table th, :host table td {\n text-align: left;\n border-collapse: collapse;\n padding: ${n(\"spacing-xs\")};\n border-right: 1px solid var(--semantic-stroke-default);\n color: var(--semantic-text-default);\n }\n\n :host table > tbody > tr > td {\n border-bottom: 1px solid var(--semantic-stroke-default);\n color: var(--semantic-text-default);\n }\n\n :host table tbody > tr:hover {\n background-color: rgba(var(--semantic-stroke-highlight_rgb), 0.05);\n }\n\n :host table tr:last-child td {\n border-bottom: 0;\n }\n\n :host table tr td:last-child, table tr th:last-child {\n border-right: 0;\n }\n `, this.setAttribute(\"stretch-horizontal\", \"\"), t.appendChild(i);\n const e = this.querySelector(\"table\");\n if (!e)\n throw new D(this, [\"table\"]);\n t.appendChild(e);\n }\n}\nd(\"table\", at);\nconst P = class x extends HTMLElement {\n constructor() {\n super(), this.isTooltipVisible = !1, this.repositionScheduled = !1;\n const t = this.attachShadow({ mode: \"open\" });\n this.tooltip = document.createElement(\"div\"), this.tooltip.classList.add(\"tooltip\");\n const i = document.createElement(\"style\");\n i.textContent = `\n .tooltip {\n position: absolute;\n background-color: rgba(var(--semantic-background-inverted_rgb), 0.9);\n color: var(--semantic-text-inverted);\n padding: ${n(\"spacing-sm\")};\n border-radius: ${n(\"border-xs\")};\n font-size: ${n(\"font-size-small\")};\n z-index: ${p.OVERLAY};\n white-space: nowrap;\n visibility: hidden;\n opacity: 0;\n transition: opacity 0.2s ease-in-out;\n pointer-events: none;\n transform: translateY(-100%);\n }\n\n .tooltip[visible=\"true\"] {\n visibility: visible;\n opacity: 1;\n }\n `, t.append(i, this.tooltip);\n const e = document.createElement(\"slot\");\n t.appendChild(e), this.addEventListener(\"mouseenter\", this.showTooltip.bind(this)), this.addEventListener(\"mouseleave\", this.hideTooltip.bind(this)), this.addEventListener(\"touchstart\", this.toggleTooltip.bind(this)), document.addEventListener(\"click\", this.handleOutsideClick.bind(this)), window.addEventListener(\"scroll\", this.scheduleReposition.bind(this));\n }\n connectedCallback() {\n this.tooltip.textContent = this.getAttribute(\"text\") || \"Tooltip content\";\n }\n disconnectedCallback() {\n document.removeEventListener(\"click\", this.handleOutsideClick.bind(this)), window.removeEventListener(\"scroll\", this.scheduleReposition.bind(this));\n }\n showTooltip() {\n this.isTooltipVisible || (x.activeTooltips.forEach((t) => {\n t !== this && t.isTooltipVisible && t.hideTooltip();\n }), x.activeTooltips.push(this), this.tooltip.textContent = this.getAttribute(\"text\") || \"Tooltip content\", this.repositionTooltip(), this.tooltip.setAttribute(\"visible\", \"true\"), this.isTooltipVisible = !0, this.touchTimeout && clearTimeout(this.touchTimeout), this.touchTimeout = window.setTimeout(() => this.hideTooltip(), 3e3));\n }\n hideTooltip() {\n this.tooltip.removeAttribute(\"visible\"), this.isTooltipVisible = !1;\n const t = x.activeTooltips.indexOf(this);\n t !== -1 && x.activeTooltips.splice(t, 1), clearTimeout(this.touchTimeout);\n }\n toggleTooltip(t) {\n t.preventDefault(), this.isTooltipVisible ? this.hideTooltip() : this.showTooltip();\n }\n handleOutsideClick(t) {\n this.contains(t.target) || this.hideTooltip();\n }\n scheduleReposition() {\n this.repositionScheduled || (this.repositionScheduled = !0, requestAnimationFrame(() => {\n this.repositionTooltip(), this.repositionScheduled = !1;\n }));\n }\n repositionTooltip() {\n if (!this.isTooltipVisible)\n return;\n const t = this.getBoundingClientRect(), i = this.tooltip.getBoundingClientRect(), e = this.closest(\"div[style*='overflow']\") || document.documentElement, o = e.getBoundingClientRect(), a = e.scrollTop, r = e.scrollLeft;\n let c = t.top + a - o.top - i.height - 8, u = t.left + r - o.left + (t.width - i.width) / 2;\n c < a && (c = t.bottom + a - o.top + 8), u < r ? u = t.left + r - o.left + t.width + 8 : u + i.width > o.width + r && (u = t.left + r - o.left - i.width - 8), c + i.height > o.height + a && (c = t.top + a - o.top - i.height - 8), this.tooltip.style.left = `${u}px`, this.tooltip.style.top = `${c}px`;\n }\n};\nP.activeTooltips = [];\nlet rt = P;\nd(\"tooltip\", rt);\nfunction b() {\n return `\n :host([stretch-vertical]) {\n height: 100%;\n }\n \n :host([stretch-horizontal]) {\n width: 100%;\n }\n `;\n}\nclass M extends HTMLElement {\n constructor() {\n super();\n const t = this.attachShadow({ mode: \"open\" }), i = document.createElement(\"style\");\n i.textContent = `\n :host {\n display: flex;\n flex-direction: column;\n width: max-content;\n }\n \n ${b()}\n\n :host .container {\n position: relative;\n display: flex;\n height: 2em;\n overflow: hidden;\n }\n\n :host .container::after {\n --icon-offset: 6px;\n content: '\\\\25BC';\n position: absolute;\n top: 0;\n right: 0;\n padding: var(--icon-offset);\n background: rgba(var(--semantic-background-inverted_rgb), 0.1);\n transition: .25s all ease;\n pointer-events: none;\n }\n\n :host .container:hover::after {\n color: var(--semantic-text-highlight);\n }\n \n :host select>option {\n background: var(--semantic-background-default);\n }\n\n :host select {\n --select-offset: calc(${n(\"spacing-sm\")} + 26px);\n /* Reset Select */\n appearance: none;\n outline: 10px red;\n border: 0;\n box-shadow: none;\n width: 100%;\n font-size: 1em;\n\n /* Personalize */\n flex: 1;\n padding-inline: ${n(\"spacing-md\")};\n padding-block: 0;\n color: var(--text-default);\n background: rgba(var(--semantic-background-inverted_rgb), 0.1);\n background-image: none;\n cursor: pointer;\n\n padding-right: var(--select-offset);\n }\n `, this.select = this.querySelector(\"select\");\n const e = document.createElement(\"div\");\n if (e.classList.add(\"container\"), !this.select)\n throw new D(this, [\"select\"]);\n e.append(this.select), t.append(i, e), this.select.addEventListener(\"change\", () => {\n this.dispatchSelectChange();\n });\n }\n // Method to dispatch the select-change event\n dispatchSelectChange() {\n const t = new CustomEvent(\"select-change\", {\n detail: { value: this.select.value },\n // Directly use select value\n bubbles: !0,\n // Allow the event to bubble up\n composed: !0\n // Allow the event to cross shadow DOM boundaries\n });\n this.dispatchEvent(t);\n }\n // Reflect the 'value' attribute to the property\n static get observedAttributes() {\n return [\"selected\"];\n }\n attributeChangedCallback(t, i, e) {\n M.observedAttributes.includes(t) && i !== e && t === \"selected\" && (this.select.value = e || \"\", this.dispatchSelectChange());\n }\n}\nd(\"select\", M);\nclass q extends HTMLElement {\n constructor() {\n super();\n const t = this.attachShadow({ mode: \"open\" }), i = document.createElement(\"style\");\n i.textContent = `\n :host {\n display: flex;\n flex-direction: column;\n padding: ${n(\"spacing-sm\")};\n flex: 1;\n }\n `, t.appendChild(i);\n const e = document.createElement(\"slot\");\n t.appendChild(e);\n }\n}\nd(\"card-content\", q);\nclass lt extends HTMLElement {\n constructor() {\n super();\n const t = this.attachShadow({ mode: \"open\" }), i = document.createElement(\"style\");\n i.textContent = `\n :host {\n box-sizing: border-box;\n border: 1px solid var(--semantic-stroke-default);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n max-width: 100%;\n box-shadow: ${n(\"shadow-light\")};\n height: 100%; /* Ensure the card takes full height */\n }\n\n card-content {\n flex: 1; /* Allows the content to grow and fill space */\n }\n \n card-media {\n display: block;\n width: 100%;\n }\n `, t.appendChild(i), this.querySelector(\"x-\");\n const e = this.querySelector(`${l()}-card-content`) || this.querySelector(`${l()}-card-media`) || this.querySelector(`${l()}-card-footer`), o = document.createElement(\"slot\");\n if (e)\n t.appendChild(o);\n else {\n const a = new q();\n a.append(o), t.append(a);\n }\n }\n}\nd(\"card\", lt);\nclass H extends HTMLElement {\n constructor() {\n super();\n const t = this.attachShadow({ mode: \"open\" });\n this.styleElement = document.createElement(\"style\"), this.styleElement.textContent = `\n :host {\n display: block;\n width: 100%;\n position: relative;\n overflow: hidden;\n }\n \n img, video {\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n \n .small {\n height: ${n(\"card-media-size-sm\")};\n }\n .medium {\n height: ${n(\"card-media-size-md\")};\n }\n .large {\n height: ${n(\"card-media-size-lg\")};\n }\n `, t.appendChild(this.styleElement), this.mediaElement = document.createElement(\"div\"), this.mediaElement.style.position = \"relative\", this.mediaElement.style.width = \"100%\", this.mediaElement.style.height = \"100%\", this.mediaElement.style.display = \"flex\", t.appendChild(this.mediaElement);\n }\n static get observedAttributes() {\n return [\"src\", \"size\"];\n }\n attributeChangedCallback(t, i, e) {\n i !== e && H.observedAttributes.includes(t) && this.updateMedia();\n }\n updateMedia() {\n const t = this.getAttribute(\"src\"), i = this.getAttribute(\"size\") || void 0, e = this.detectMediaType(t);\n if (t && e) {\n this.mediaElement.innerHTML = \"\";\n const o = e === \"image\" ? document.createElement(\"img\") : document.createElement(\"video\");\n if (o.src = t, i && (o.className = i), e === \"video\") {\n const a = o;\n a.muted = !0, a.controls = !1, a.autoplay = !0, a.loop = !0, a.playsInline = !0, this.mediaElement.appendChild(a);\n } else\n this.mediaElement.appendChild(o);\n }\n }\n detectMediaType(t) {\n var e;\n if (!t)\n return null;\n const i = (e = t.split(\".\").pop()) == null ? void 0 : e.toLowerCase();\n if (i) {\n const o = [\"jpg\", \"jpeg\", \"png\", \"gif\", \"bmp\", \"webp\"], a = [\"mp4\", \"webm\", \"ogg\"];\n if (o.includes(i))\n return \"image\";\n if (a.includes(i))\n return \"video\";\n }\n return null;\n }\n // Getters and setters for attributes\n get src() {\n return this.getAttribute(\"src\");\n }\n set src(t) {\n t ? this.setAttribute(\"src\", t) : this.removeAttribute(\"src\");\n }\n get size() {\n return this.getAttribute(\"size\");\n }\n set size(t) {\n t ? this.setAttribute(\"size\", t) : this.removeAttribute(\"size\");\n }\n}\nd(\"card-media\", H);\nclass dt extends HTMLElement {\n constructor() {\n super();\n const t = this.attachShadow({ mode: \"open\" }), i = document.createElement(\"style\");\n i.textContent = `\n :host {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n padding: ${n(\"spacing-sm\")};\n border-top: 1px solid var(--semantic-stroke-default);\n background-color: var(--card-footer-background, transparent);\n flex-shrink: 0; /* Prevent footer from shrinking */\n }\n `, t.appendChild(i);\n const e = document.createElement(\"slot\");\n t.appendChild(e);\n }\n}\nd(\"card-footer\", dt);\nclass ct extends HTMLElement {\n constructor() {\n super();\n const t = this.attachShadow({ mode: \"open\" }), i = document.createElement(\"style\");\n i.textContent = `\n :host {\n display: inline-block;\n width: 50px;\n height: 50px;\n overflow: hidden;\n }\n\n :host([size=\"small\"]) {\n width: 30px;\n height: 30px;\n }\n\n :host([size=\"large\"]) {\n width: 70px;\n height: 70px;\n }\n\n svg {\n width: 100%;\n height: 100%;\n animation: rotate 2s linear infinite;\n }\n\n circle {\n fill: none;\n stroke-width: 4;\n stroke: var(--semantic-stroke-highlight);\n stroke-dasharray: 150, 200;\n stroke-dashoffset: 0;\n animation: dash 1.5s ease-in-out infinite;\n }\n\n @keyframes rotate {\n 100% {\n transform: rotate(360deg);\n }\n }\n\n @keyframes dash {\n 0% {\n stroke-dasharray: 1, 200;\n stroke-dashoffset: 0;\n }\n 50% {\n stroke-dasharray: 100, 200;\n stroke-dashoffset: -50;\n }\n 100% {\n stroke-dasharray: 1, 200;\n stroke-dashoffset: -150;\n }\n }\n `;\n const e = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n e.setAttribute(\"viewBox\", \"0 0 50 50\");\n const o = document.createElementNS(\n \"http://www.w3.org/2000/svg\",\n \"circle\"\n );\n o.setAttribute(\"cx\", \"25\"), o.setAttribute(\"cy\", \"25\"), o.setAttribute(\"r\", \"20\"), e.appendChild(o), t.appendChild(i), t.appendChild(e);\n }\n static get observedAttributes() {\n return [\"size\", \"color\"];\n }\n attributeChangedCallback(t, i, e) {\n t === \"size\" && i !== e && this.updateSize(), t === \"color\" && i !== e && this.updateColor();\n }\n updateSize() {\n this.setAttribute(\"size\", this.size);\n }\n updateColor() {\n this.style.setProperty(\"--spinner-color\", this.color);\n }\n set size(t) {\n this.setAttribute(\"size\", t);\n }\n get size() {\n return this.getAttribute(\"size\") || \"small\";\n }\n set color(t) {\n this.setAttribute(\"color\", t);\n }\n get color() {\n return this.getAttribute(\"color\") || \"#000\";\n }\n}\nd(\"spinner\", ct);\nclass ht extends HTMLElement {\n constructor() {\n super();\n const t = this.attachShadow({ mode: \"open\" }), i = document.createElement(\"style\");\n i.textContent = `\n ::slotted(a) {\n color: var(--semantic-text-highlight);\n text-decoration: none;\n }\n \n ::slotted(a:hover) {\n color: var(--semantic-text-highlight);\n text-decoration: underline;\n }\n \n ::slotted(a:active) {\n color: var(--semantic-text-highlight);\n text-decoration: none;\n }\n \n ::slotted(a:visited) {\n color: var(--semantic-text-highlight);\n text-decoration: none;\n }\n `, t.appendChild(i);\n const e = document.createElement(\"slot\");\n t.append(e);\n }\n}\nd(\"text-link\", ht);\nclass ut extends HTMLElement {\n constructor() {\n super();\n const t = this.attachShadow({ mode: \"open\" }), i = document.createElement(\"style\");\n i.textContent = `\n ::slotted(a) {\n color: inherit;\n text-decoration: inherit;\n font-weight: inherit;\n }\n \n ::slotted(a:hover) {\n color: inherit;\n text-decoration: inherit;\n font-weight: inherit;\n }\n \n ::slotted(a:active) {\n color: inherit;\n text-decoration: inherit;\n font-weight: inherit;\n }\n \n ::slotted(a:visited) {\n color: inherit;\n text-decoration: inherit;\n font-weight: inherit;\n }\n `, t.appendChild(i);\n const e = document.createElement(\"slot\");\n t.append(e);\n }\n}\nd(\"bare-link\", ut);\nclass y extends HTMLElement {\n constructor() {\n super(), this.shadow = this.attachShadow({ mode: \"open\" });\n const t = document.createElement(\"style\");\n t.textContent = ` \n :host {\n display: inline;\n }\n \n /* General reset for slotted elements */\n ::slotted(h1), ::slotted(h2), ::slotted(h3), ::slotted(h4), ::slotted(h5), ::slotted(h6),\n ::slotted(p) {\n margin: 0;\n padding: 0;\n color: inherit;\n text-align: inherit;\n }\n\n :host([display=\"title\"]) ::slotted(*), :host([display=\"title\"]) {\n font-family: ${n(\"font-family-heading\")};\n font-size: ${n(\"font-size-title\")}; /* Large font size */\n font-weight: 400;\n line-height: 1.2;\n letter-spacing: 0em;\n }\n \n /* Heading 1 */\n :host([display=\"h1\"]) ::slotted(*), :host([display=\"h1\"]) {\n font-family: ${n(\"font-family-heading\")};\n font-size: ${n(\"font-size-xxl\")}; /* Large font size */\n font-weight: 400;\n line-height: 1.167;\n letter-spacing: -0.01562em;\n }\n \n /* Heading 2 */\n :host([display=\"h2\"]) ::slotted(*), :host([display=\"h2\"]) {\n font-family: ${n(\"font-family-heading\")};\n font-size: ${n(\"font-size-xl\")}; /* Extra-large font size */\n font-weight: 300;\n line-height: 1.2;\n letter-spacing: -0.00833em;\n }\n \n /* Heading 3 */\n :host([display=\"h3\"]) ::slotted(*), :host([display=\"h3\"]) {\n font-family: ${n(\"font-family-heading\")};\n font-size: ${n(\"font-size-lg\")}; /* Large font size */\n font-weight: 400;\n line-height: 1.167;\n letter-spacing: 0em;\n }\n \n /* Heading 4 */\n :host([display=\"h4\"]) ::slotted(*), :host([display=\"h4\"]) {\n font-family: ${n(\"font-family-heading\")};\n font-size: ${n(\"font-size-md\")}; /* Medium font size */\n font-weight: 400;\n line-height: 1.235;\n letter-spacing: 0.00735em;\n }\n \n /* Heading 5 */\n :host([display=\"h5\"]) ::slotted(*), :host([display=\"h5\"]) {\n font-family: ${n(\"font-family-heading\")};\n font-size: ${n(\"font-size-sm\")}; /* Small font size */\n font-weight: 400;\n line-height: 1.334;\n letter-spacing: 0em;\n }\n \n /* Heading 6 */\n :host([display=\"h6\"]) ::slotted(*), :host([display=\"h6\"]) {\n font-family: ${n(\"font-family-heading\")};\n font-size: ${n(\"font-size-xs\")}; /* Small font size */\n font-weight: 500;\n line-height: 1.6;\n letter-spacing: 0.0075em;\n }\n \n /* Subtitle 1 */\n :host([display=\"subtitle1\"]) ::slotted(*), :host([display=\"subtitle1\"]) {\n font-family: ${n(\"font-family-default\")};\n font-size: ${n(\"font-size-md\")}; /* Medium font size */\n font-weight: 400;\n line-height: 1.75;\n letter-spacing: 0.00938em;\n }\n \n /* Subtitle 2 */\n :host([display=\"subtitle2\"]) ::slotted(*), :host([display=\"subtitle2\"]) {\n font-family: ${n(\"font-family-default\")};\n font-size: ${n(\"font-size-sm\")}; /* Small font size */\n font-weight: 500;\n line-height: 1.57;\n letter-spacing: 0.00714em;\n }\n \n /* Body 1 */\n :host([display=\"body1\"]) ::slotted(*), :host([display=\"body1\"]) {\n font-family: ${n(\"font-family-default\")};\n font-size: ${n(\"font-size-default\")}; /* Medium font size */\n font-weight: 400;\n line-height: 1.5;\n letter-spacing: 0.00938em;\n }\n \n /* Body 2 */\n :host([display=\"body2\"]) ::slotted(*), :host([display=\"body2\"]) {\n font-family: ${n(\"font-family-default\")};\n font-size: ${n(\"font-size-sm\")}; /* Small font size */\n font-weight: 400;\n line-height: 1.43;\n letter-spacing: 0.01071em;\n }\n \n /* Button */\n :host([display=\"button\"]) ::slotted(*), :host([display=\"button\"]) {\n font-family: ${n(\"font-family-default\")};\n font-size: ${n(\"font-size-sm\")}; /* Small font size */\n font-weight: 500;\n line-height: 1.75;\n letter-spacing: 0.02857em;\n text-transform: uppercase;\n }\n \n /* Caption */\n :host([display=\"caption\"]) ::slotted(*), :host([display=\"caption\"]) {\n font-family: ${n(\"font-family-default\")};\n font-size: ${n(\"font-size-sm\")}; /* Extra-small font size */\n font-weight: 400;\n line-height: 1.66;\n letter-spacing: 0.03333em;\n }\n \n /* Overline */\n :host([display=\"overline\"]) ::slotted(*), :host([display=\"overline\"]) {\n font-family: ${n(\"font-family-default\")};\n font-size: ${n(\"font-size-xs\")}; /* Extra-small font size */\n font-weight: 400;\n line-height: 2.66;\n letter-spacing: 0.08333em;\n text-transform: uppercase;\n }\n `, this.shadow.appendChild(t);\n const i = document.createElement(\"slot\");\n this.shadow.appendChild(i);\n }\n set display(t) {\n this.setAttribute(\"display\", t);\n }\n get display() {\n return this.getAttribute(\"display\") || \"\";\n }\n static get observedAttributes() {\n return [\"display\"];\n }\n}\nd(\"typography\", y);\nclass pt extends HTMLElement {\n constructor() {\n super();\n const t = this.attachShadow({ mode: \"open\" }), i = document.createElement(\"style\");\n i.textContent = `\n :host {\n display: block;\n background-color: var(--semantic-background-default);\n color: var(--semantic-text-default);\n font-family: ${n(\"font-family-default\")};\n width: 100%;\n }\n `, t.appendChild(i);\n const e = document.createElement(\"slot\");\n t.append(e);\n }\n}\nd(\"container\", pt);\nclass B extends HTMLElement {\n constructor() {\n super();\n const t = this.attachShadow({ mode: \"open\" });\n this.styleElement = document.createElement(\"style\"), t.appendChild(this.styleElement);\n const i = document.createElement(\"slot\");\n t.append(i), this.updateStyles();\n }\n static get observedAttributes() {\n return [\"xs\", \"md\", \"lg\", \"xl\"];\n }\n attributeChangedCallback(t, i, e) {\n B.observedAttributes.includes(t) && i !== e && this.updateStyles();\n }\n updateStyles() {\n const t = this.getAttribute(\"xs\") || \"1\", i = this.getAttribute(\"md\") || \"1\", e = this.getAttribute(\"lg\") || \"1\", o = this.getAttribute(\"xl\") || \"1\";\n this.styleElement.textContent = `\n :host {\n width: 100%;\n display: grid;\n gap: ${n(\"spacing-md\")};\n grid-template-columns: repeat(${t}, 1fr);\n }\n\n @media (min-width: ${m.XS}px) {\n :host([xs]) {\n grid-template-columns: repeat(${t}, 1fr);\n }\n }\n\n @media (min-width: ${m.MD}px) {\n :host([md]) {\n grid-template-columns: repeat(${i}, 1fr);\n }\n }\n\n @media (min-width: ${m.LG}px) {\n :host([lg]) {\n grid-template-columns: repeat(${e}, 1fr);\n }\n }\n\n @media (min-width: ${m.XL}px) {\n :host([xl]) {\n grid-template-columns: repeat(${o}, 1fr);\n }\n }\n `;\n }\n // Getters and setters for attributes\n get xs() {\n return this.getAttribute(\"xs\");\n }\n set xs(t) {\n t ? this.setAttribute(\"xs\", t) : this.removeAttribute(\"xs\");\n }\n get md() {\n return this.getAttribute(\"md\");\n }\n set md(t) {\n t ? this.setAttribute(\"md\", t) : this.removeAttribute(\"md\");\n }\n get lg() {\n return this.getAttribute(\"lg\");\n }\n set lg(t) {\n t ? this.setAttribute(\"lg\", t) : this.removeAttribute(\"lg\");\n }\n get xl() {\n return this.getAttribute(\"xl\");\n }\n set xl(t) {\n t ? this.setAttribute(\"xl\", t) : this.removeAttribute(\"xl\");\n }\n}\nd(\"grid\", B);\nfunction gt(s, t) {\n return Object.keys(s).filter((i) => isNaN(Number(i))).map((i) => t(s[i]));\n}\nvar _ = /* @__PURE__ */ ((s) => (s.CENTER = \"center\", s.LEFT = \"start\", s.RIGHT = \"end\", s.EVEN = \"space-evenly\", s.BETWEEN = \"space-between\", s))(_ || {});\nfunction j() {\n return `\n ${gt(_, (s) => `\n :host([justify-content=\"${s}\"]) {\n justify-content: ${s};\n }\n\n :host([align-items=\"${s}\"]) {\n align-items: ${s};\n }\n `).join(\"\")}\n `;\n}\nclass R extends HTMLElement {\n constructor() {\n super();\n const t = this.attachShadow({ mode: \"open\" });\n this.styleElement = document.createElement(\"style\"), t.appendChild(this.styleElement);\n const i = document.createElement(\"slot\");\n t.append(i), this.setAttribute(\"stretch-horizontal\", \"\"), this.updateStyles();\n }\n static get observedAttributes() {\n return [\"direction\", \"gap\", \"margin-inline\", \"margin-block\", \"stretch\"];\n }\n attributeChangedCallback(t, i, e) {\n R.observedAttributes.includes(t) && i !== e && this.updateStyles();\n }\n updateStyles() {\n const t = this.getAttribute(\"direction\") || \"vertical\", i = this.getGapVariable(\n this.getAttribute(\"gap\") || \"none\"\n ), e = this.getMarginVariable(\n this.getAttribute(\"margin-inline\") || \"none\"\n ), o = this.getMarginVariable(\n this.getAttribute(\"margin-block\") || \"none\"\n );\n this.styleElement.textContent = `\n :host {\n display: flex;\n flex-direction: ${t === \"horizontal\" ? \"row\" : \"column\"};\n gap: ${i};\n padding-inline: ${e};\n padding-block: ${o};\n flex-wrap: wrap;\n box-sizing: border-box;\n }\n \n ${j()}\n ${b()}\n\n :host([stretch][direction=\"horizontal\"]) {\n width: 100%;\n }\n\n :host([stretch][direction=\"vertical\"]) {\n height: 100%;\n }\n `;\n }\n getGapVariable(t) {\n switch (t) {\n case \"none\":\n return \"0px\";\n case \"small\":\n return n(\"spacing-sm\");\n case \"medium\":\n return n(\"spacing-md\");\n case \"large\":\n return n(\"spacing-lg\");\n case \"extra-large\":\n return n(\"spacing-xl\");\n default:\n return n(\"spacing-md\");\n }\n }\n getMarginVariable(t) {\n return this.getGapVariable(t);\n }\n // Getters and setters for attributes\n get direction() {\n return this.getAttribute(\"direction\");\n }\n set direction(t) {\n t ? this.setAttribute(\"direction\", t) : this.removeAttribute(\"direction\");\n }\n get gap() {\n return this.getAttribute(\"gap\") || \"none\";\n }\n set gap(t) {\n t ? this.setAttribute(\"gap\", t) : this.removeAttribute(\"gap\");\n }\n get marginInline() {\n return this.getAttribute(\"margin-inline\") || \"none\";\n }\n set marginInline(t) {\n t ? this.setAttribute(\"margin-inline\", t) : this.removeAttribute(\"margin-inline\");\n }\n get marginBlock() {\n return this.getAttribute(\"margin-block\") || \"none\";\n }\n set marginBlock(t) {\n t ? this.setAttribute(\"margin-block\", t) : this.removeAttribute(\"margin-block\");\n }\n}\nd(\"stack\", R);\nclass I extends HTMLElement {\n constructor() {\n super();\n const t = this.attachShadow({ mode: \"open\" }), i = document.createElement(\"style\");\n i.textContent = `\n :host {\n display: block;\n overflow: auto;\n }\n\n ${b()}\n `, t.appendChild(i);\n const e = document.createElement(\"slot\");\n t.append(e);\n }\n static get observedAttributes() {\n return [\"stretch\", \"height\", \"width\"];\n }\n connectedCallback() {\n this.hasAttribute(\"height\") && (this.style.height = this.getAttribute(\"height\") || \"auto\"), this.hasAttribute(\"width\") && (this.style.width = this.getAttribute(\"width\") || \"auto\");\n }\n attributeChangedCallback(t, i, e) {\n !I.observedAttributes.includes(t) || i === e || (t === \"height\" && (this.style.height = e || \"auto\"), t === \"width\" && (this.style.width = e || \"auto\"));\n }\n}\nd(\"scroll-box\", I);\nclass bt extends HTMLElement {\n constructor() {\n super(), this.shadow = this.attachShadow({ mode: \"open\" });\n const t = document.createElement(\"style\");\n t.textContent = `\n :host {\n display: inline-block;\n overflow: hidden;\n position: relative;\n box-sizing: border-box;\n }\n\n ::slotted(img) {\n display: block;\n object-fit: contain; /* Maintain aspect ratio while fitting within bounds */\n object-position: center; /* Center the image if there are empty spaces */\n max-width: 100%;\n }\n\n :host([size=\"small\"]) ::slotted(img) {\n width: 128px;\n height: auto;\n }\n\n :host([size=\"medium\"]) ::slotted(img) {\n width: 256px;\n height: auto;\n }\n\n :host([size=\"large\"]) ::slotted(img) {\n width: 512px;\n height: auto;\n }\n\n :host([size=\"none\"]) ::slotted(img) {\n width: 100%;\n height: 100%;\n }\n `, this.shadow.appendChild(t);\n const i = document.createElement(\"slot\");\n this.shadow.appendChild(i);\n }\n static get observedAttributes() {\n return [\"size\", \"width\", \"height\"];\n }\n attributeChangedCallback(t, i, e) {\n i !== e && [\"size\", \"width\", \"height\"].includes(t) && this.updateImageSize();\n }\n updateImageSize() {\n const t = this.querySelector(\"img\"), i = this.getAttribute(\"width\") || void 0, e = this.getAttribute(\"height\") || void 0;\n i && (t.style.width = i), e && (t.style.height = e);\n }\n}\nd(\"figure\", bt);\nclass mt extends HTMLElement {\n constructor() {\n super();\n const t = document.createElement(\"style\");\n t.textContent = `\n :host {\n display: flex;\n flex-wrap: wrap;\n }\n \n ${b()}\n `;\n const i = this.attachShadow({ mode: \"open\" });\n i.appendChild(t);\n const e = document.createElement(\"slot\");\n i.appendChild(e);\n }\n}\nd(\"block\", mt);\nclass ft extends HTMLElement {\n constructor() {\n super();\n const t = this.attachShadow({ mode: \"open\" });\n this.button = document.createElement(\"button\"), this.button.classList.add(\"button\");\n const i = document.createElement(\"style\");\n i.textContent = `\n :host {\n width: max-content;\n height: max-content;\n }\n\n .button {\n border: none;\n border-radius: ${n(\"border-xs\")};\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: ${n(\"spacing-md\")};\n text-align: center;\n transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1), box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1), border-color 250ms cubic-bezier(0.4, 0, 0.2, 1), color 250ms cubic-bezier(0.4, 0, 0.2, 1);\n white-space: nowrap;\n touch-action: manipulation; /* Helps with touch interactions */\n }\n \n ${b()}\n\n :host .button {\n width: 100%;\n }\n \n :host([variant=\"filled\"]) .button {\n background-color: var(--semantic-background-highlight);\n color: var(--semantic-text-inverted);\n }\n\n :host([variant=\"filled\"]:hover) .button,\n :host([variant=\"filled\"]:active) .button {\n background-color: var(--semantic-background-hover);\n color: var(--semantic-text-inverted);\n box-shadow: ${n(\"shadow-light\")};\n }\n\n :host([variant=\"outlined\"]) .button {\n background-color: transparent;\n border: 1px solid var(--semantic-stroke-highlight);\n color: var(--semantic-text-highlight);\n }\n\n :host([variant=\"outlined\"]:hover) .button,\n :host([variant=\"outlined\"]:active) .button {\n border-color: var(--semantic-stroke-hover);\n color: var(--semantic-text-hover);\n background-color: rgba(var(--semantic-background-highlight_rgb), 0.1);\n }\n\n :host([size=\"small\"]) .button {\n padding-block: ${n(\"spacing-xs\")};\n padding-inline: ${n(\"spacing-sm\")};\n }\n\n :host([size=\"medium\"]) .button {\n padding-block: ${n(\"spacing-sm\")};\n padding-inline: ${n(\"spacing-md\")};\n }\n\n :host([size=\"large\"]) .button {\n padding-block: ${n(\"spacing-md\")};\n padding-inline: ${n(\"spacing-lg\")};\n }\n\n .button:focus {\n outline: 2px solid var(--button-focus-outline);\n }\n `, t.appendChild(i);\n const e = new y();\n e.display = \"button\";\n const o = document.createElement(\"slot\");\n e.append(o), this.button.appendChild(e), t.appendChild(this.button), this.hasAttribute(\"variant\") || this.setAttribute(\"variant\", \"filled\"), this.hasAttribute(\"size\") || this.setAttribute(\"size\", \"medium\"), this.button.addEventListener(\n \"touchstart\",\n this.handleTouchStart.bind(this),\n { passive: !0 }\n ), this.button.addEventListener(\"touchend\", this.handleTouchEnd.bind(this), {\n passive: !0\n }), this.button.addEventListener(\n \"touchcancel\",\n this.handleTouchEnd.bind(this),\n { passive: !0 }\n );\n }\n handleTouchStart() {\n this.button.classList.add(\"button-active\");\n }\n handleTouchEnd() {\n this.button.classList.remove(\"button-active\");\n }\n // Observe changes to 'variant' and 'size' attributes\n static get observedAttributes() {\n return [\"variant\", \"size\", \"stretch\"];\n }\n // Handle changes to attributes\n attributeChangedCallback(t, i, e) {\n t === \"variant\" && i !== e ? this.updateVariant() : t === \"size\" && i !== e && this.updateSize();\n }\n updateVariant() {\n this.setAttribute(\"variant\", this.variant);\n }\n updateSize() {\n this.setAttribute(\"size\", this.size);\n }\n set variant(t) {\n this.setAttribute(\"variant\", t);\n }\n get variant() {\n return this.getAttribute(\"variant\") || \"filled\";\n }\n set size(t) {\n this.setAttribute(\"size\", t);\n }\n get size() {\n return this.getAttribute(\"size\") || \"medium\";\n }\n}\nd(\"button\", ft);\nclass vt extends HTMLElement {\n constructor() {\n super();\n const t = this.attachShadow({ mode: \"open\" }), i = document.createElement(\"style\");\n i.textContent = `\n :host {\n display: inline-flex;\n align-items: flex-start;\n }\n\n .toggle-switch {\n width: 42px;\n height: 24px;\n background-color: var(--semantic-stroke-default);\n border-radius: 12px;\n position: relative;\n transition: background-color 0.2s;\n flex-shrink: 0;\n cursor: pointer;\n }\n\n .switch-knob {\n width: 20px;\n height: 20px;\n background-color: var(--semantic-background-default);\n border-radius: ${n(\"border-sm\")};\n position: absolute;\n top: 2px;\n left: 2px;\n transition: left 0.2s;\n }\n\n :host([checked]) .toggle-switch {\n background-color: var(--semantic-stroke-highlight);\n }\n\n :host([checked]) .switch-knob {\n left: 20px;\n }\n\n :host([disabled]) .toggle-switch {\n cursor: not-allowed;\n opacity: 0.6;\n }\n\n input {\n display: none;\n }\n\n .label {\n margin-left: ${n(\"spacing-sm\")};\n cursor: auto;\n }\n\n .required-asterisk::after {\n content: \" *\";\n color: red; /* Optional: To highlight the asterisk */\n }\n `, t.appendChild(i), this.inputElement = document.createElement(\"input\"), this.inputElement.type = \"checkbox\", t.appendChild(this.inputElement), this.toggleSwitch = document.createElement(\"div\"), this.toggleSwitch.classList.add(\"toggle-switch\"), t.appendChild(this.toggleSwitch), this.switchKnob = document.createElement(\"div\"), this.switchKnob.classList.add(\"switch-knob\"), this.toggleSwitch.appendChild(this.switchKnob), this.labelElement = new y(), this.labelElement.display = \"body1\", this.labelElement.classList.add(\"label\"), t.appendChild(this.labelElement), this.toggleSwitch.addEventListener(\"click\", () => {\n this.disabled || (this.checked = !this.checked, this.dispatchEvent(new Event(\"change\")));\n }), this.hasAttribute(\"checked\") || (this.checked = !1), this.hasAttribute(\"disabled\") || (this.disabled = !1), this.updateLabel();\n }\n static get observedAttributes() {\n return [\"checked\", \"disabled\", \"name\", \"value\", \"required\", \"label\"];\n }\n attributeChangedCallback(t, i, e) {\n t === \"checked\" && i !== e ? this.updateCheckedState() : t === \"disabled\" && i !== e ? this.updateDisabledState() : t === \"name\" && i !== e ? this.inputElement.name = e || \"\" : t === \"value\" && i !== e ? this.inputElement.value = e || \"\" : t === \"required\" && i !== e ? (this.inputElement.required = e !== null, this.updateLabel()) : t === \"label\" && i !== e && this.updateLabel();\n }\n updateCheckedState() {\n this.inputElement.checked = this.checked, this.checked ? this.setAttribute(\"checked\", \"\") : this.removeAttribute(\"checked\");\n }\n updateDisabledState() {\n this.inputElement.disabled = this.disabled, this.disabled ? this.setAttribute(\"disabled\", \"\") : this.removeAttribute(\"disabled\");\n }\n updateLabel() {\n this.labelElement.textContent = this.label, this.required ? this.labelElement.classList.add(\"required-asterisk\") : this.labelElement.classList.remove(\"required-asterisk\");\n }\n set checked(t) {\n t ? this.setAttribute(\"checked\", \"\") : this.removeAttribute(\"checked\");\n }\n get checked() {\n return this.hasAttribute(\"checked\");\n }\n set disabled(t) {\n t ? this.setAttribute(\"disabled\", \"\") : this.removeAttribute(\"disabled\");\n }\n get disabled() {\n return this.hasAttribute(\"disabled\");\n }\n set name(t) {\n this.setAttribute(\"name\", t);\n }\n get name() {\n return this.getAttribute(\"name\") || \"\";\n }\n set value(t) {\n this.setAttribute(\"value\", t);\n }\n get value() {\n return this.getAttribute(\"value\") || \"\";\n }\n set required(t) {\n t ? this.setAttribute(\"required\", \"\") : this.removeAttribute(\"required\");\n }\n get required() {\n return this.hasAttribute(\"required\");\n }\n set label(t) {\n this.setAttribute(\"label\", t);\n }\n get label() {\n return this.getAttribute(\"label\") || \"\";\n }\n // Provide form-like behavior by returning the input element\n get form() {\n return this.inputElement.form;\n }\n // Required for form submission\n get validity() {\n return this.inputElement.validity;\n }\n get validationMessage() {\n return this.inputElement.validationMessage;\n }\n checkValidity() {\n return this.inputElement.checkValidity();\n }\n reportValidity() {\n return this.inputElement.reportValidity();\n }\n // Support setting focus on the component\n focus() {\n this.inputElement.focus();\n }\n}\nd(\"switch\", vt);\nclass xt extends HTMLElement {\n constructor() {\n super();\n const t = this.attachShadow({ mode: \"open\" }), i = document.createElement(\"style\");\n i.textContent = `\n :host {\n display: inline;\n width: max-content;\n position: relative;\n }\n\n .content-wrapper {\n display: inline-block;\n position: relative;\n }\n\n .badge {\n position: absolute;\n top: 0;\n right: 0;\n background-color: var(--semantic-background-highlight);\n color: var(--semantic-text-inverted);\n border-radius: 15px;\n padding: 0 6px;\n height: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 0.75rem;\n font-weight: bold;\n transform: translate(75%, -50%);\n z-index: 1;\n }\n\n :host([hidden]) .badge {\n display: none;\n }\n `, t.appendChild(i), this.contentWrapper = document.createElement(\"div\"), this.contentWrapper.className = \"content-wrapper\", t.appendChild(this.contentWrapper);\n const e = document.createElement(\"slot\");\n this.contentWrapper.appendChild(e), this.badgeElement = document.createElement(\"span\"), this.badgeElement.className = \"badge\", t.appendChild(this.badgeElement), this.updateBadge();\n }\n static get observedAttributes() {\n return [\"content\", \"hidden\"];\n }\n attributeChangedCallback(t, i, e) {\n t === \"content\" && i !== e ? this.updateBadge() : t === \"hidden\" && i !== e && this.updateVisibility();\n }\n updateBadge() {\n this.badgeElement.textContent = this.getAttribute(\"content\") || \"\";\n }\n updateVisibility() {\n const t = this.hasAttribute(\"hidden\");\n this.badgeElement.style.display = t ? \"none\" : \"flex\";\n }\n // Property setters and getters\n set content(t) {\n this.setAttribute(\"content\", t);\n }\n get content() {\n return this.getAttribute(\"content\") || \"\";\n }\n set hidden(t) {\n t ? this.setAttribute(\"hidden\", \"\") : this.removeAttribute(\"hidden\");\n }\n get hidden() {\n return this.hasAttribute(\"hidden\");\n }\n}\nd(\"badge\", xt);\nclass yt extends HTMLElement {\n constructor() {\n super();\n const t = this.attachShadow({ mode: \"open\" }), i = document.createElement(\"style\");\n i.textContent = `\n :host {\n display: inline-flex;\n align-items: center;\n gap: ${n(\"spacing-sm\")};\n font-family: sans-serif;\n width: max-content;\n }\n\n .color-container {\n position: relative;\n }\n\n .color-preview {\n width: 24px;\n height: 24px;\n border-radius: 50%;\n border: 2px solid #ccc;\n background-color: #ffffff;\n box-shadow: 0 0 3px rgba(var(--semantic-background-inverted_rgb), 0.2);\n cursor: pointer;\n }\n\n .icon {\n position: absolute;\n bottom: 0;\n right: 0;\n width: 16px; /* Reduced size */\n height: 16px; /* Reduced size */\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n background-color: var(--semantic-background-default);\n border-radius: 50%;\n border: 1px solid var(--semantic-stroke-default);\n box-shadow: 0 0 1px rgba(var(--semantic-background-inverted_rgb), 0.3);\n transform: translate(30%, 30%); /* Adjust badge position */\n pointer-events: all;\n }\n\n .icon svg {\n fill: currentColor;\n width: 12px; /* Adjusted size */\n height: 12px; /* Adjusted size */\n }\n\n input[type=\"color\"] {\n z-index: ${p.TOP};\n opacity: 0;\n position: absolute;\n width: 32px;\n height: 32px;\n transform: translate(-1px, -1px);\n cursor: pointer;\n }\n `, t.appendChild(i), this.colorInput = document.createElement(\"input\"), this.colorInput.type = \"color\", t.appendChild(this.colorInput);\n const e = document.createElement(\"div\");\n e.classList.add(\"color-container\"), this.colorPreview = document.createElement(\"div\"), this.colorPreview.classList.add(\"color-preview\"), e.appendChild(this.colorPreview), this.iconElement = document.createElement(\"div\"), this.iconElement.classList.add(\"icon\"), this.iconElement.innerHTML = `\n \n \n \n `, e.appendChild(this.iconElement), t.appendChild(e), this.colorInput.addEventListener(\n \"input\",\n this.handleColorChange.bind(this)\n ), this.colorPreview.addEventListener(\"click\", () => this.colorInput.click()), this.iconElement.addEventListener(\"click\", () => this.colorInput.click()), this.updateColor(this.getAttribute(\"value\") || \"#ffffff\");\n }\n static get observedAttributes() {\n return [\"value\", \"label\"];\n }\n attributeChangedCallback(t, i, e) {\n t === \"value\" && i !== e ? this.updateColor(e) : t === \"label\" && i !== e && this.updateLabel();\n }\n handleColorChange(t) {\n const e = t.target.value;\n this.colorPreview.style.backgroundColor = e, this.dispatchEvent(new CustomEvent(\"color-change\", { detail: { color: e } }));\n }\n updateColor(t) {\n t = t || \"#ffffff\", this.value = t, this.colorPreview.style.backgroundColor = t, this.colorInput.value = t;\n }\n updateLabel() {\n var i;\n const t = this.getAttribute(\"label\") || \"\";\n this.labelElement || (this.labelElement = new y(), this.labelElement.display = \"body1\", (i = this.shadowRoot) == null || i.appendChild(this.labelElement)), this.labelElement.textContent = t;\n }\n set value(t) {\n this.setAttribute(\"value\", t);\n }\n get value() {\n return this.getAttribute(\"value\") || \"#ffffff\";\n }\n set label(t) {\n this.setAttribute(\"label\", t);\n }\n get label() {\n return this.getAttribute(\"label\") || \"\";\n }\n}\nd(\"color-picker\", yt);\nclass kt extends HTMLElement {\n constructor() {\n super();\n const t = this.attachShadow({ mode: \"open\" }), i = document.createElement(\"style\");\n i.textContent = `\n :host {\n display: block;\n width: 100%;\n margin: 0;\n box-sizing: border-box;\n }\n\n .divider {\n height: 1px;\n background-color: var(--semantic-stroke-default);\n margin-left: 0;\n margin-right: 0;\n box-sizing: border-box;\n transition: background-color 0.3s;\n }\n\n :host([vertical]) {\n display: inline-block;\n width: 1px;\n height: 100%; /* Take up the full height of the parent */\n margin: 0; /* Remove horizontal margins for vertical divider */\n }\n\n :host([vertical]) .divider {\n width: 1px;\n height: 100%; /* Ensure it fills the parent height */\n }\n\n :host([light]) .divider {\n background-color: var(--semantic-stroke-light);\n }\n\n :host([fade]) .divider {\n background-color: inherit;\n border-bottom: 1px solid transparent;\n border-image: linear-gradient(90deg,var(--semantic-stroke-highlight),transparent 50%);\n border-image-slice: 1;\n }\n `, t.appendChild(i), this.dividerElement = document.createElement(\"div\"), this.dividerElement.className = \"divider\", t.appendChild(this.dividerElement);\n }\n static get observedAttributes() {\n return [\"vertical\", \"light\"];\n }\n // Property setters and getters\n set vertical(t) {\n t ? this.setAttribute(\"vertical\", \"\") : this.removeAttribute(\"vertical\");\n }\n get vertical() {\n return this.hasAttribute(\"vertical\");\n }\n set light(t) {\n t ? this.setAttribute(\"light\", \"\") : this.removeAttribute(\"light\");\n }\n get light() {\n return this.hasAttribute(\"light\");\n }\n}\nd(\"divider\", kt);\nclass wt extends HTMLElement {\n constructor() {\n super();\n const t = this.attachShadow({ mode: \"open\" }), i = document.createElement(\"style\");\n i.textContent = `\n :host {\n display: flex;\n flex-wrap: wrap;\n }\n\n ${j()}\n ${b()}\n\n :host([margin-inline=\"small\"]) {\n padding-inline: ${n(\"spacing-sm\")};\n }\n\n :host([margin-block=\"small\"]) {\n padding-block: ${n(\"spacing-sm\")};\n }\n\n :host([margin-inline=\"medium\"]) {\n padding-inline: ${n(\"spacing-md\")};\n }\n\n :host([margin-block=\"medium\"]) {\n padding-block: ${n(\"spacing-md\")};\n }\n\n :host([margin-inline=\"large\"]) {\n padding-inline: ${n(\"spacing-lg\")};\n }\n\n :host([margin-block=\"large\"]) {\n padding-block: ${n(\"spacing-lg\")};\n }\n\n :host([margin-inline=\"extra-large\"]) {\n padding-inline: ${n(\"spacing-xl\")};\n }\n\n :host([margin-block=\"extra-large\"]) {\n padding-block: ${n(\"spacing-xl\")};\n }\n\n\n :host([margin-block=\"extra-large\"]) {\n padding-block: ${n(\"spacing-xl\")};\n }\n `, t.appendChild(i);\n const e = document.createElement(\"slot\");\n t.append(e);\n }\n static get observedAttributes() {\n return [\"margin-inline\", \"margin-block\", \"justify-content\", \"align-items\"];\n }\n}\nd(\"box\", wt);\nclass N extends HTMLElement {\n constructor() {\n super(), this.toggleCheckbox = () => {\n this.checkboxElement.disabled || (this.checked = !this.checkboxElement.checked, this.dispatchEvent(new Event(\"change\")));\n };\n const t = this.attachShadow({ mode: \"open\" }), i = document.createElement(\"style\");\n i.textContent = `\n :host {\n display: inline-flex;\n align-items: center;\n gap: ${n(\"spacing-xs\")};\n cursor: pointer;\n width: max-content;\n }\n\n :host([disabled]) {\n cursor: not-allowed;\n opacity: 0.5;\n }\n\n .checkbox {\n appearance: none;\n width: 2em;\n height: 2em;\n border: 2px solid var(--semantic-stroke-default);\n border-radius: ${n(\"border-xs\")};\n background-color: transparent;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background-color 0.3s, border-color 0.3s;\n cursor: pointer;\n }\n\n .checkbox:checked {\n background-color: var(--semantic-background-highlight);\n border-color: var(--semantic-background-highlight);\n }\n\n .checkbox:checked::before {\n content: \"\";\n width: 1em;\n height: 1em;\n background-color: var(--semantic-background-default);\n clip-path: polygon(14% 44%, 0% 65%, 50% 100%, 100% 18%, 80% 0%, 43% 62%);\n }\n\n .checkbox:disabled {\n background-color: rgba(var(--semantic-background-inverted_rgb), 0.2);\n border-color: var(--semantic-stroke-default);\n cursor: not-allowed;\n }\n `, t.appendChild(i), this.checkboxElement = document.createElement(\"input\"), this.checkboxElement.type = \"checkbox\", this.checkboxElement.className = \"checkbox\", t.appendChild(this.checkboxElement);\n const e = document.createElement(\"div\");\n e.className = \"label\";\n const o = document.createElement(\"slot\");\n e.appendChild(o), t.append(e), this.addEventListener(\"click\", this.toggleCheckbox), this.addEventListener(\"pointerdown\", (a) => a.preventDefault()), this.checkboxElement.addEventListener(\"click\", (a) => {\n a.stopPropagation();\n }), this.updateCheckbox();\n }\n static get observedAttributes() {\n return [\"checked\", \"disabled\"];\n }\n attributeChangedCallback(t, i, e) {\n N.observedAttributes.includes(t) && i !== e && this.updateCheckbox();\n }\n updateCheckbox() {\n this.checkboxElement.checked = this.hasAttribute(\"checked\"), this.checkboxElement.disabled = this.hasAttribute(\"disabled\"), this.checkboxElement.disabled ? this.classList.add(\"disabled\") : this.classList.remove(\"disabled\");\n }\n // Property setters and getters\n set checked(t) {\n t ? this.setAttribute(\"checked\", \"\") : this.removeAttribute(\"checked\");\n }\n get checked() {\n return this.hasAttribute(\"checked\");\n }\n set disabled(t) {\n t ? this.setAttribute(\"disabled\", \"\") : this.removeAttribute(\"disabled\");\n }\n get disabled() {\n return this.hasAttribute(\"disabled\");\n }\n}\nd(\"checkbox\", N);\nvar w = /* @__PURE__ */ ((s) => (s.HIGHLIGHT = \"highlight\", s.DEFAULT = \"default\", s.INVERTED = \"inverted\", s))(w || {});\nconst O = class $ extends HTMLElement {\n constructor() {\n super(), this.shadow = this.attachShadow({ mode: \"open\" });\n const t = document.createElement(\"style\");\n t.textContent = `\n :host {\n display: inline-block;\n overflow: hidden;\n position: relative;\n box-sizing: border-box;\n --icon-color: var(--semantic-text-default);\n }\n\n :host([color=\"${w.DEFAULT}\"]) {\n --icon-color: var(--semantic-text-default);\n }\n\n :host([color=\"${w.INVERTED}\"]) {\n --icon-color: var(--semantic-text-inverted);\n }\n\n :host([color=\"${w.HIGHLIGHT}\"]) {\n --icon-color: var(--semantic-text-highlight);\n }\n\n svg {\n fill: var(--icon-color);\n display: block;\n object-fit: contain;\n width: 100%;\n height: 100%;\n }\n\n :host([size=\"small\"]) {\n width: 16px;\n height: 16px;\n }\n\n :host([size=\"medium\"]) {\n width: 32px;\n height: 32px;\n }\n\n :host([size=\"large\"]) {\n width: 64px;\n height: 64px;\n }\n\n :host([size=\"none\"]) {\n width: 100%;\n height: 100%;\n }\n `, this.shadow.appendChild(t);\n }\n static get observedAttributes() {\n return [\"size\", \"svg\"];\n }\n attributeChangedCallback(t, i, e) {\n i !== e && e && t === \"svg\" && this.loadSvg(e);\n }\n async loadSvg(t) {\n try {\n if ($.svgCache.has(t))\n this.setSvgContent($.svgCache.get(t));\n else {\n const i = await fetch(t);\n if (!i.ok)\n throw new Error(`Failed to load SVG: ${i.statusText}`);\n const e = await i.text();\n $.svgCache.set(t, e), this.setSvgContent(e);\n }\n } catch (i) {\n console.error(\"Error loading SVG:\", i);\n }\n }\n setSvgContent(t) {\n const i = document.createElement(\"div\");\n i.innerHTML = t;\n const e = i.querySelector(\"svg\");\n if (e) {\n if (e.removeAttribute(\"width\"), e.removeAttribute(\"height\"), !e.hasAttribute(\"viewBox\")) {\n const o = e.getAttribute(\"width\") || \"100\", a = e.getAttribute(\"height\") || \"100\";\n e.setAttribute(\"viewBox\", `0 0 ${o} ${a}`);\n }\n this.shadow.appendChild(e);\n } else\n console.error(\"No valid SVG element found in the provided content.\");\n }\n};\nO.svgCache = /* @__PURE__ */ new Map();\nlet S = O;\nd(\"icon\", S);\nclass $t extends HTMLElement {\n constructor() {\n super();\n const t = this.attachShadow({ mode: \"open\" }), i = document.createElement(\"style\");\n i.textContent = `\n :host {\n display: block;\n padding: 0;\n margin: 0;\n width: max-content;\n }\n\n /* Style the slotted list (ul or ol) */\n ::slotted(ul),\n ::slotted(ol) {\n margin: 0;\n padding: 0;\n list-style-position: inside; /* Ensures the markers are inside */\n }\n\n /* Custom bullet styling for unordered lists */\n ::slotted(ul) {\n list-style-type: disc; /* Use a bullet for unordered lists */\n }\n\n /* Style list items inside the slotted ul/ol */\n ::slotted(ul li),\n ::slotted(ol li) {\n padding: 0.5em 0;\n border-bottom: 1px solid #ddd;\n }\n\n /* Custom numbering for ordered lists */\n ::slotted(ol) {\n list-style-type: decimal; /* Use numbers for ordered lists */\n counter-reset: item; /* Reset counter for custom numbering */\n }\n\n ::slotted(ol li) {\n counter-increment: item;\n }\n\n ::slotted(ol li::before) {\n content: counters(item, \".\") \" \";\n font-weight: bold;\n margin-right: 0.5em;\n }\n `, t.appendChild(i);\n const e = document.createElement(\"slot\");\n t.appendChild(e);\n }\n}\nd(\"list\", $t);\nclass Et extends HTMLElement {\n constructor() {\n super();\n const t = this.attachShadow({ mode: \"open\" }), i = document.createElement(\"style\");\n i.textContent = `\n :host {\n width: 100%;\n }\n `, t.appendChild(i);\n const e = document.createElement(\"slot\");\n t.appendChild(e), this.initializeTabs = this.initializeTabs.bind(this);\n }\n connectedCallback() {\n this.initializeTabs();\n }\n initializeTabs() {\n var o;\n const t = Array.from(\n this.querySelectorAll(`${l()}-tab-button`)\n ), i = Array.from(\n this.querySelectorAll(`${l()}-tab-panel`)\n );\n if (t.length === 0 || i.length === 0) {\n console.error(\"No tab buttons or panels found.\");\n return;\n }\n t.forEach((a) => {\n const r = a.getAttribute(\"id\");\n r && a.addEventListener(\"click\", () => this.selectTab(r));\n });\n const e = this.getAttribute(\"selected\") || ((o = t[0]) == null ? void 0 : o.getAttribute(\"id\")) || \"\";\n e ? this.selectTab(e) : t.length > 0 && this.selectTab(t[0].getAttribute(\"id\") || \"\");\n }\n selectTab(t) {\n const i = Array.from(\n this.querySelectorAll(`${l()}-tab-button`)\n ), e = Array.from(\n this.querySelectorAll(`${l()}-tab-panel`)\n );\n i.forEach((a) => {\n a.getAttribute(\"id\") === t ? a.setAttribute(\"active\", \"\") : a.removeAttribute(\"active\");\n }), e.forEach((a) => {\n a.getAttribute(\"id\") === t ? a.setAttribute(\"active\", \"\") : a.removeAttribute(\"active\");\n });\n const o = this.querySelector(\n `${l()}-tab-buttons`\n );\n o && typeof o.updateActiveIndicator == \"function\" && o.updateActiveIndicator();\n }\n}\nd(\"tabs\", Et);\nclass At extends HTMLElement {\n constructor() {\n super();\n const t = this.attachShadow({ mode: \"open\" }), i = document.createElement(\"style\");\n i.textContent = `\n :host {\n display: none;\n background: var(--semantic-background-default);\n }\n\n :host([active]) {\n display: block;\n }\n `, t.appendChild(i);\n const e = document.createElement(\"slot\");\n t.appendChild(e);\n }\n}\nd(\"tab-panel\", At);\nclass Ct extends HTMLElement {\n constructor() {\n super();\n const t = this.attachShadow({ mode: \"open\" }), i = document.createElement(\"style\");\n i.textContent = `\n :host {\n display: block;\n position: relative;\n overflow: hidden;\n width: 100%;\n }\n\n .tab-panel {\n position: absolute;\n top: 0;\n left: 100%;\n width: 100%;\n opacity: 0;\n transition: opacity 0.3s ease, transform 0.3s ease;\n transform: translateX(100%);\n }\n\n .tab-panel[active] {\n position: relative;\n left: 0;\n opacity: 1;\n transform: translateX(0%);\n transition: opacity 0.3s ease, transform 0.3s ease;\n }\n `, t.appendChild(i);\n const e = document.createElement(\"slot\");\n t.appendChild(e);\n }\n}\nd(\"tab-panels\", Ct);\nclass zt extends HTMLElement {\n constructor() {\n super();\n const t = this.attachShadow({ mode: \"open\" }), i = document.createElement(\"style\");\n i.textContent = `\n :host {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n padding: 10px;\n background: var(--tab-button-bg, transparent);\n cursor: pointer;\n transition: background 0.3s;\n }\n\n :host([active]) {\n font-weight: bold;\n }\n\n :host(:hover) {\n background: #e0e0e0;\n }\n `, t.appendChild(i);\n const e = document.createElement(\"slot\");\n t.appendChild(e);\n }\n}\nd(\"tab-button\", zt);\nclass St extends HTMLElement {\n constructor() {\n super();\n const t = this.attachShadow({ mode: \"open\" }), i = document.createElement(\"style\");\n i.textContent = `\n :host {\n position: relative;\n display: flex;\n border-bottom: 1px solid var(--semantic-stroke-default);\n margin: 0;\n padding: 0;\n list-style: none;\n overflow: hidden;\n width: 100%;\n }\n\n ::slotted(x-tab-button) {\n flex: 1;\n padding: 10px;\n text-align: center;\n background: transparent;\n border: none;\n cursor: pointer;\n transition: background 0.3s;\n position: relative;\n z-index: 1;\n }\n\n .active-indicator {\n position: absolute;\n bottom: 0;\n height: 2px;\n background-color: var(--tab-button-active-border-color, var(--semantic-stroke-highlight));\n transition: left 0.3s ease, width 0.3s ease;\n z-index: 0;\n }\n `, t.appendChild(i);\n const e = document.createElement(\"slot\");\n t.appendChild(e);\n const o = document.createElement(\"div\");\n o.className = \"active-indicator\", t.appendChild(o);\n }\n connectedCallback() {\n requestAnimationFrame(() => {\n this.updateActiveIndicator();\n }), this.addEventListener(\"slotchange\", () => this.updateActiveIndicator());\n }\n updateActiveIndicator() {\n var o, a;\n const t = (o = this.shadowRoot) == null ? void 0 : o.querySelector(\"slot\"), e = ((t == null ? void 0 : t.assignedElements()) || []).find(\n (r) => r.hasAttribute(\"active\")\n );\n if (e) {\n const r = (a = this.shadowRoot) == null ? void 0 : a.querySelector(\n \".active-indicator\"\n ), c = e.getBoundingClientRect(), u = this.getBoundingClientRect();\n r.style.left = `${c.left - u.left}px`, r.style.width = `${c.width}px`;\n }\n }\n}\nd(\"tab-buttons\", St);\nclass F extends HTMLElement {\n constructor() {\n super(), this.handleClick = () => {\n if (!this.radioElement.disabled) {\n const a = this.getAttribute(\"value\") || \"\", r = new CustomEvent(\"radio-selected\", {\n bubbles: !0,\n // Ensure it bubbles up to the RadioGroup\n composed: !0,\n // Allow it to pass through shadow DOM\n detail: { radio: this, value: a }\n // Pass the radio button and its value as detail\n });\n this.dispatchEvent(r);\n }\n };\n const t = this.attachShadow({ mode: \"open\" }), i = document.createElement(\"style\");\n i.textContent = `\n :host {\n display: inline-flex;\n align-items: center;\n gap: ${n(\"spacing-xs\")};\n }\n\n :host([disabled]) {\n cursor: not-allowed;\n opacity: 0.5;\n }\n\n label {\n display: inline-flex;\n align-items: center;\n cursor: pointer;\n gap: ${n(\"spacing-xs\")};\n }\n\n .radio {\n appearance: none;\n width: 2em; /* Adjust size */\n height: 2em; /* Adjust size */\n border: 2px solid var(--semantic-stroke-default);\n border-radius: 50%;\n background-color: transparent;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n transition: background-color 0.3s, border-color 0.3s;\n position: relative; /* Important for the inner dot */\n cursor: pointer;\n transform: translateY(-3px);\n }\n\n .radio:checked {\n background-color: var(--semantic-background-highlight);\n border-color: var(--semantic-background-highlight);\n }\n\n .radio:checked::before {\n content: \"\";\n width: 1em; /* Inner dot size */\n height: 1em;\n background-color: var(--semantic-background-default);\n border-radius: 50%;\n position: absolute;\n }\n\n .radio:disabled {\n background-color: rgba(var(--semantic-background-inverted_rgb), 0.2);\n border-color: var(--semantic-stroke-default);\n }\n `, t.appendChild(i);\n const e = document.createElement(\"label\");\n this.radioElement = document.createElement(\"input\"), this.radioElement.type = \"radio\", this.radioElement.className = \"radio\", e.appendChild(this.radioElement);\n const o = document.createElement(\"slot\");\n e.appendChild(o), t.appendChild(e), this.radioElement.addEventListener(\"click\", this.handleClick), this.updateRadio();\n }\n static get observedAttributes() {\n return [\"checked\", \"disabled\", \"value\"];\n }\n attributeChangedCallback() {\n this.updateRadio();\n }\n updateRadio() {\n this.radioElement.checked = this.hasAttribute(\"checked\"), this.radioElement.disabled = this.hasAttribute(\"disabled\");\n }\n set checked(t) {\n t ? this.setAttribute(\"checked\", \"\") : this.removeAttribute(\"checked\");\n }\n get checked() {\n return this.hasAttribute(\"checked\");\n }\n set disabled(t) {\n t ? this.setAttribute(\"disabled\", \"\") : this.removeAttribute(\"disabled\");\n }\n get disabled() {\n return this.hasAttribute(\"disabled\");\n }\n set value(t) {\n this.setAttribute(\"value\", t);\n }\n get value() {\n return this.getAttribute(\"value\") || \"\";\n }\n}\nd(\"radio-button\", F);\nclass Tt extends HTMLElement {\n constructor() {\n super(), this.handleRadioClick = (t) => {\n const i = t.target;\n i instanceof F && !i.disabled && (this.setAttribute(\"selected\", i.value), this.dispatchEvent(\n new CustomEvent(\"radio-selected\", {\n detail: {\n radio: i,\n value: i.value\n }\n })\n ));\n };\n }\n connectedCallback() {\n this.updateRadios(), this.addEventListener(\"click\", this.handleRadioClick);\n }\n attributeChangedCallback() {\n this.updateSelected();\n }\n updateSelected() {\n this.radios = this.querySelectorAll(\n `${l()}-radio-button`\n ), this.radios.forEach((t) => {\n t.value === this.getAttribute(\"selected\") && (this.clearChecked(), t.checked = !0);\n });\n }\n static get observedAttributes() {\n return [\"selected\"];\n }\n updateRadios() {\n this.radios = this.querySelectorAll(\n `${l()}-radio-button`\n );\n let t = !1;\n this.radios.forEach((i) => {\n i.checked && (t && (i.checked = !1), t = !0);\n });\n }\n clearChecked() {\n var t;\n (t = this.radios) == null || t.forEach((i) => {\n i.checked = !1;\n });\n }\n}\nd(\"radio-group\", Tt);\nclass Lt extends HTMLElement {\n constructor() {\n super();\n const t = this.attachShadow({ mode: \"open\" }), i = document.createElement(\"style\");\n i.textContent = `\n :host {\n display: none;\n }\n `, t.appendChild(i);\n const e = document.querySelector(`${l()}-loading`);\n e && document.body.removeChild(e);\n }\n}\nd(\"loading\", Lt);\nclass Mt extends HTMLElement {\n constructor() {\n super(), this.disableScroll();\n const t = this.attachShadow({ mode: \"open\" }), i = document.createElement(\"style\");\n i.textContent = `\n :host {\n display: block;\n width: 100vw;\n height: 100vh;\n background-color: var(--semantic-background-default);\n color: var(--semantic-text-highlight);\n position: fixed;\n top: 0;\n left: 0;\n z-index: ${p.OVERLAY};\n opacity: 1;\n transition: opacity 1s ease-in-out;\n }\n\n :host(.hidden) {\n opacity: 0;\n pointer-events: none;\n }\n `, t.appendChild(i);\n const e = document.createElement(\"slot\");\n t.appendChild(e);\n }\n static get observedAttributes() {\n return [\"timeout\"];\n }\n connectedCallback() {\n const t = Number.parseInt(this.getAttribute(\"timeout\") || \"3000\");\n setTimeout(() => {\n this.hide();\n }, t);\n }\n hide() {\n this.classList.add(\"hidden\"), setTimeout(() => {\n this.enableScroll();\n const t = `${l()}-theme`;\n document.querySelector(t).removeChild(this);\n }, 1e3);\n }\n disableScroll() {\n document.body.style.height = \"100vh\", document.body.style.width = \"100vw\", document.body.style.overflow = \"hidden\";\n }\n enableScroll() {\n document.body.style.height = \"\", document.body.style.width = \"\", document.body.style.overflow = \"\";\n }\n}\nd(\"splash\", Mt);\nvar T = /* @__PURE__ */ ((s) => (s.BOTTOM_NAVIGATION = \"bottom-navigation\", s.APP_BAR = \"app-bar\", s))(T || {});\nclass Ht extends HTMLElement {\n constructor() {\n super(), this.autoDismissTimeout = null;\n const t = this.attachShadow({ mode: \"open\" }), i = document.createElement(\"style\");\n i.textContent = `\n :host {\n display: none;\n box-sizing: border-box;\n z-index: ${p.SNACKBAR};\n pointer-events: none;\n width: max-content;\n max-width: 100%;\n position: relative;\n background-color: transparent;\n transition: opacity 0.3s ease, display 0.3s ease allow-discrete;\n opacity: 0;\n pointer-events: auto;\n }\n\n ${b()}\n\n :host([fixed]) {\n position: fixed;\n padding: ${n(\"spacing-lg\")};\n width: 100%;\n left: 0;\n right: 0;\n max-width: 100%;\n box-sizing: border-box;\n }\n\n :host([visible]) {\n display: block;\n opacity: 1;\n }\n\n :host([offset=\"${T.BOTTOM_NAVIGATION}\"]) {\n bottom: ${n(\"bottom-navigation-height\")};\n }\n\n :host([offset=\"${T.APP_BAR}\"]) {\n top: ${n(\"app-bar-height\")};\n }\n\n :host([position=\"right\"]) {\n right: 0;\n left: auto;\n transform: none;\n }\n\n :host([position=\"left\"]) {\n left: 0;\n right: auto;\n transform: none;\n }\n\n /* Child div for content and background */\n .snackbar-content {\n box-sizing: border-box;\n padding: ${n(\"spacing-sm\")};\n background-color: var(--semantic-background-inverted);\n color: var(--semantic-text-inverted);\n border-radius: 4px;\n box-shadow: ${n(\"shadow-dark\")};\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n\n /* Close button styles */\n .close-button {\n background: transparent;\n border: none;\n color: var(--semantic-text-inverted);\n font-size: 16px;\n cursor: pointer;\n margin-left: ${n(\"spacing-sm\")};\n }\n\n /* Slot for message content */\n ::slotted(*) {\n display: block;\n flex-grow: 1;\n }\n\n /* Hide the close button when closable is not set */\n :host([closable]) .close-button {\n display: block;\n }\n\n :host(:not([closable])) .close-button {\n display: none;\n }\n `, t.appendChild(i);\n const e = document.createElement(\"div\");\n e.classList.add(\"snackbar-content\");\n const o = document.createElement(\"slot\");\n e.appendChild(o);\n const a = document.createElement(\"button\");\n a.classList.add(\"close-button\"), a.innerHTML = \"✕\", a.addEventListener(\"click\", () => {\n this.visible = !1;\n }), e.appendChild(a), t.appendChild(e), this.setupAutoDismiss();\n }\n static get observedAttributes() {\n return [\"visible\", \"position\", \"timeout\", \"offset\", \"closable\"];\n }\n attributeChangedCallback(t, i, e) {\n t === \"visible\" && i !== e ? this.toggleVisibility() : t === \"timeout\" && i !== e ? this.setupAutoDismiss() : t === \"closable\" && i !== e && this.updateCloseButtonVisibility();\n }\n toggleVisibility() {\n this.visible ? (this.classList.add(\"visible\"), this.startAutoDismiss()) : this.classList.remove(\"visible\");\n }\n setupAutoDismiss() {\n this.autoDismissTimeout && clearTimeout(this.autoDismissTimeout);\n const t = this.timeout;\n t > 0 && (this.autoDismissTimeout = setTimeout(() => {\n this.visible = !1;\n }, t));\n }\n startAutoDismiss() {\n this.timeout > 0 && (this.autoDismissTimeout = setTimeout(() => {\n this.removeAttribute(\"visible\");\n }, this.timeout));\n }\n updateCloseButtonVisibility() {\n var i;\n const t = (i = this.shadowRoot) == null ? void 0 : i.querySelector(\n \".close-button\"\n );\n t && (this.hasAttribute(\"closable\") ? t.style.display = \"block\" : t.style.display = \"none\");\n }\n // Getter and setter for 'visible' attribute\n set visible(t) {\n t ? (this.setAttribute(\"visible\", \"\"), this.style.display = \"block\") : this.removeAttribute(\"visible\");\n }\n get visible() {\n return this.hasAttribute(\"visible\");\n }\n // Getter and setter for 'timeout' attribute\n set timeout(t) {\n this.setAttribute(\"timeout\", t.toString());\n }\n get timeout() {\n return parseInt(this.getAttribute(\"timeout\") || \"0\", 10);\n }\n}\nd(\"snackbar\", Ht);\nclass Bt extends HTMLElement {\n constructor() {\n super();\n const t = this.attachShadow({ mode: \"open\" }), i = document.createElement(\"style\");\n i.textContent = `\n :host {\n display: block;\n width: 100%;\n position: relative; /* Ensure positioning context for inner divs */ \n }\n\n /* Fixed/Sticky navigation styles */\n .bottom-nav {\n width: 100%;\n justify-content: space-evenly;\n background-color: var(--semantic-background-alternate);\n border-top: 1px solid var(--semantic-stroke-default);\n color: var(--semantic-text-default);\n padding: ${n(\"spacing-sm\")};\n box-sizing: border-box;\n position: var(--bottom-nav-position, sticky);\n bottom: 0;\n left: 0;\n transition: bottom 0.3s ease-in-out;\n height: ${n(\"bottom-navigation-height\")};\n display: flex;\n align-items: center;\n }\n\n .spacer {\n display: none;\n height: ${n(\"bottom-navigation-height\")};\n }\n \n :host([fixed]) .spacer {\n display: block;\n }\n\n :host([fixed]) {\n z-index: ${p.TOP};\n }\n\n :host([fixed]) .bottom-nav {\n position: fixed;\n }\n\n :host([static]) .bottom-nav {\n position: static;\n }\n `, t.appendChild(i);\n const e = document.createElement(\"div\");\n e.className = \"spacer\";\n const o = document.createElement(\"div\");\n o.className = \"bottom-nav\";\n const a = document.createElement(\"slot\");\n o.appendChild(a), t.appendChild(e), t.appendChild(o);\n }\n static get observedAttributes() {\n return [\"fixed\", \"static\"];\n }\n}\nd(\"bottom-navigation\", Bt);\nclass Rt extends HTMLElement {\n constructor() {\n super(), this.shadow = this.attachShadow({ mode: \"open\" });\n const t = document.createElement(\"style\");\n t.textContent = `\n :host {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: ${n(\"spacing-xs\")};\n justify-content: center;\n padding: ${n(\"spacing-xs\")};\n box-sizing: border-box;\n text-align: center;\n cursor: pointer;\n transition: color 0.18s ease-in-out;\n height: calc(${n(\"bottom-navigation-height\")} - 4px); /* Fixed height */\n width: auto; /* Allow width to adjust based on content */\n }\n\n :host(:hover), :host([active]) {\n color: var(--semantic-text-highlight);\n }\n\n .icon-container {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%; /* Fixed height as a percentage of the container height */\n overflow: hidden;\n }\n\n .icon {\n object-fit: contain; /* Ensure proper scaling */\n }\n\n .label {\n width: 100%;\n text-align: center;\n }\n\n /* Hide label if not provided */\n :host([no-label]) .label {\n display: none;\n }\n `;\n const i = this.getAttribute(\"svg\");\n if (i) {\n const o = document.createElement(\"div\");\n o.className = \"icon-container\", this.icon = new S(), this.icon.setAttribute(\"svg\", i), this.icon.setAttribute(\"size\", \"none\"), this.icon.className = \"icon\", o.appendChild(this.icon), this.shadow.appendChild(o);\n }\n const e = new y();\n e.className = \"label\", e.setAttribute(\"display\", \"h6\"), e.textContent = this.getAttribute(\"label\") || \"\", this.getAttribute(\"label\") || this.setAttribute(\"no-label\", \"\"), this.shadow.appendChild(t), this.shadow.appendChild(e);\n }\n static get observedAttributes() {\n return [\"svg\"];\n }\n attributeChangedCallback(t, i, e) {\n if (t === \"svg\" && i !== e) {\n const o = this.shadow.querySelector(\".icon-container\");\n this.icon ? e ? this.icon.setAttribute(\"svg\", e) : (o && o.removeChild(this.icon), this.icon = void 0) : e && (this.icon = new S(), this.icon.setAttribute(\"svg\", e), this.icon.className = \"icon\", o && o.appendChild(this.icon));\n }\n }\n}\nd(\"bottom-navigation-action\", Rt);\nexport {\n ot as AppBar,\n xt as Badge,\n ut as BareLink,\n mt as Block,\n Bt as BottomNavigation,\n Rt as BottomNavigationAction,\n wt as Box,\n ft as Button,\n lt as Card,\n q as CardContent,\n dt as CardFooter,\n H as CardMedia,\n N as Checkbox,\n nt as Chip,\n yt as ColorPicker,\n pt as Container,\n kt as Divider,\n bt as Figure,\n B as Grid,\n S as Icon,\n st as Install,\n $t as List,\n Lt as Loading,\n F as RadioButton,\n Tt as RadioGroup,\n I as ScrollBox,\n M as Select,\n Ht as Snackbar,\n ct as Spinner,\n Mt as Splash,\n R as Stack,\n vt as Switch,\n zt as TabButton,\n St as TabButtons,\n At as TabPanel,\n Ct as TabPanels,\n at as Table,\n Et as Tabs,\n ht as TextLink,\n et as Theme,\n rt as Tooltip,\n y as Typography,\n It as configurePrefix,\n Nt as loadComponents,\n Dt as waitForComponents\n};\n//# sourceMappingURL=main.mjs.map\n","export type Locale = 'de' | 'en';\nimport { Storage} from \"./storage/Storage.ts\";\n\nconst DEFAULT_LOCALE: Locale = 'en';\n\n\nconst TRANSLATIONS: { [key: string]: { [key: string]: string } } = {\n \"app.title\": {\n en: \"Bulls App\",\n de: \" Bulls App\"\n\n },\n \"app.offline\": {\n en: \"You are offline, and data may be outdated.\",\n de: \"Du bist offline, Daten sind eventuell nicht aktuell.\"\n },\n \"app.games\": {\n en: \"Schedule\",\n de: \"Spielplan\"\n },\n \"app.games.tab-bulls\": {\n en: \"Bulls\",\n de: \"Bulls\"\n },\n \"app.games.tab-teams\": {\n en: \"My Teams\",\n de: \"Meine Teams\"\n },\n \"app.settings.my-teams\": {\n en: \"My Teams\",\n de: \"Meine Teams\"\n },\n \"app.settings.games\": {\n en: \"Games and Events\",\n de: \"Spiele und Veranstaltungen\"\n },\n \"app.events.no-events\": {\n en: \"No events are scheduled at the moment\",\n de: \"Derzeit sind keine Veranstaltungen geplant\"\n },\n \"app.settings.showPastGames\": {\n en: \"Show past games\",\n de: \"Vergangene Spiele anzeigen\"\n },\n \"app.settings.showPastEvents\": {\n en: \"Show past event\",\n de: \"Vergangene Veranstaltungen anzeigen\"\n },\n \"app.settings.display\": {\n en: \"Display\",\n de: \"Anzeige\"\n },\n \"app.settings.theme\": {\n en: \"Theme\",\n de: \"Thema\"\n },\n \"app.settings.theme.auto\": {\n en: \"Auto\",\n de: \"Automatisch\"\n },\n \"app.settings.theme.dark\": {\n en: \"Dark\",\n de: \"Dunkel\"\n },\n \"app.settings.theme.light\": {\n en: \"Light\",\n de: \"Hell\"\n },\n \"app.settings.language\": {\n en: \"Language\",\n de: \"Sprache\"\n },\n \"app.settings.language.auto\": {\n en: \"Auto\",\n de: \"Automatisch\"\n },\n \"app.settings.language.de\": {\n en: \"German\",\n de: \"Deutsch\"\n },\n \"app.settings.language.en\": {\n en: \"English\",\n de: \"Englisch\"\n },\n \"app.settings.reload\": {\n en: \"Reload App?\",\n de: \"App neu laden?\"\n },\n \"app.games.no-games\": {\n en: \"No games scheduled at the moment\",\n de: \"Derzeit sind keine Spiele geplant\"\n },\n \"app.settings.version\": {\n en: \"App Version\",\n de: \"App Version\"\n },\n \"app.settings.about\": {\n en: \"About This App\",\n de: \"Ãœber diese App\"\n },\n \"app.settings.legal\": {\n en: \"This app works offline and does not store any personal data on remote servers. All data is processed and stored only on your device. The app may use external services to retrieve publicly available information, but no personal data is shared or transmitted.\",\n de: \"Diese App funktioniert offline und speichert keine persönlichen Daten auf entfernten Servern. Alle Daten werden ausschließlich auf Ihrem Gerät verarbeitet und gespeichert. Die App kann externe Dienste nutzen, um öffentlich verfügbare Informationen abzurufen, aber keine persönlichen Daten werden geteilt oder übertragen.\"\n },\n \"app.settings.outdated\": {\n en: \"The information provided by this app may be subject to change and could be outdated. While we strive to keep it accurate, we cannot guarantee that all data is always up to date. Please verify important information from official sources.\",\n de: \"Die Informationen, die diese App bereitstellt, können sich ändern und möglicherweise veraltet sein. Obwohl wir uns bemühen, sie stets aktuell zu halten, können wir nicht garantieren, dass alle Daten immer auf dem neuesten Stand sind. Bitte überprüfen Sie wichtige Informationen bei offiziellen Quellen.\"\n }\n}\n\n\nexport function getLang(): string | undefined {\n if (Storage.getLanguage() === \"auto\") {\n if (navigator.languages != undefined) {\n return navigator.languages[0].split(\"-\")?.[0];\n }\n\n return navigator.language.split(\"-\")?.[0];\n }\n\n return Storage.getLanguage();\n}\n\nconst defaultLocale = \"en\";\n\nexport function translate(key: string, locale?: Locale): string {\n locale = (getLang() || defaultLocale) as Locale;\n\n if (TRANSLATIONS[key] && TRANSLATIONS[key][locale]) {\n return TRANSLATIONS[key][locale];\n }\n\n if (TRANSLATIONS[key] && TRANSLATIONS[key][DEFAULT_LOCALE]) {\n return TRANSLATIONS[key][DEFAULT_LOCALE];\n }\n\n return key;\n}\n","import { Route } from \"./Route.ts\";\n\nexport class Router extends HTMLElement {\n static routes: Route[] = [];\n\n constructor() {\n super();\n window.addEventListener('hashchange', () => this.update());\n\n this.update();\n }\n\n public static unregister(route: Route) {\n this.routes = this.routes.filter(v => v !== route);\n }\n\n public static register(route: Route) {\n this.routes.push(route);\n\n if (route.isMatchingPath()) {\n route.show();\n } else {\n route.hide();\n }\n }\n\n public static current(): string {\n return window.location.hash.slice(1); // Remove the '#' symbol\n }\n\n private update() {\n Router.routes.forEach((route) => {\n if (route.isMatchingPath()) {\n route.show();\n } else {\n route.hide();\n }\n });\n }\n\n connectedCallback() {\n this.update(); // Trigger initial route on page load\n }\n\n public static default(): Route|undefined\n {\n return Router.routes.find((route) => route.isDefault);\n }\n\n public static exists(path: string): boolean\n {\n return Router.routes.some((route) => route.path === path);\n }\n}\n","import { Snackbar, BareLink, BottomNavigationAction } from '@arjanfrans/web-components-ui';\nimport { translate } from './translations'\nimport { Router } from './router/Router';\n\nexport class Shell extends HTMLElement {\n private shadow: ShadowRoot;\n private snackbarContainer: HTMLDivElement;\n\n constructor() {\n super();\n this.shadow = this.attachShadow({ mode: 'open' });\n\n this.shadow.innerHTML = `\n \n\n \n \n\n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n `;\n\n this.snackbarContainer = this.shadow.querySelector('#snackbar-container')! as HTMLDivElement;\n }\n\n connectedCallback() {\n setTimeout(() => {\n const splash = this.shadow.querySelector('#splash');\n if (splash) {\n // Trigger fade-out\n splash.classList.add('fade-out');\n\n // Remove splash and restore pointer events and scrolling after transition ends\n splash.addEventListener('transitionend', () => {\n splash.remove();\n this.removeAttribute('style'); // Restore scrolling\n });\n }\n }, 2000); // delay before splash fades out\n\n this.networkStatusListener();\n this.activeBottomNavigation();\n }\n\n private activeBottomNavigation(): void {\n const links = this.shadow.querySelectorAll('x-bottom-navigation > x-bare-link > a');\n \n if (links.length === 0) {\n return;\n }\n \n \n // Function to update the active state\n const updateActiveState = () => {\n const activeRoute = Router.current();\n \n for (const link of links) {\n const linkRoute = link.href.split('#')?.[1];\n const action = link.querySelector('x-bottom-navigation-action');\n \n if (action) {\n if (linkRoute === activeRoute) {\n action.setAttribute('active', '');\n } else {\n action.removeAttribute('active');\n }\n }\n }\n };\n \n // Ensure active state on initial load\n const initializeState = () => {\n const currentHash = Router.current();\n \n // If no hash is present or invalid, set to default route\n if (!currentHash) {\n window.location.hash = `#games`;\n }\n \n updateActiveState();\n };\n \n // Add listeners for hashchange and popstate\n window.addEventListener('hashchange', updateActiveState);\n window.addEventListener('popstate', updateActiveState);\n \n // Initialize the active state\n initializeState();\n }\n \n private networkStatusListener() {\n window.addEventListener('online', () => {\n const existingSnackbar = this.snackbarContainer.querySelector('#offline-status') as Snackbar | null;\n\n if (existingSnackbar) {\n existingSnackbar.removeAttribute(\"visible\");\n }\n });\n\n window.addEventListener('offline', () => {\n let existingSnackbar = this.snackbarContainer.querySelector('#offline-status') as Snackbar | null;\n\n if (!existingSnackbar) {\n this.snackbarContainer.innerHTML = `\n \n ${translate('app.offline')}\n \n `;\n\n existingSnackbar = this.snackbarContainer.querySelector('#offline-status') as Snackbar | null\n }\n\n ;\n\n existingSnackbar.setAttribute(\"visible\", \"\");\n });\n }\n\n}\n","import {getLang} from \"./translations.ts\";\n\nexport function toDateString(date: Date): string {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, \"0\"); // Months are zero-based\n const day = String(date.getDate()).padStart(2, \"0\");\n\n return `${year}-${month}-${day}`;\n}\n\nexport function toTimeString(date: Date): string {\n const hour = String(date.getHours()).padStart(2, \"0\");\n const minute = String(date.getMinutes()).padStart(2, \"0\");\n\n return `${hour}:${minute}`;\n}\n\nconst locale = getLang();\n\nexport const dateTimeFormatterShort = new Intl.DateTimeFormat(locale, { dateStyle: \"short\", timeStyle: \"short\" })\n\nexport const dateTimeFormatter = new Intl.DateTimeFormat(locale, { dateStyle: \"full\", timeStyle: \"short\" })\nexport const dateFormatter = new Intl.DateTimeFormat(locale, { dateStyle: \"full\" })\nexport const timeFormatter = new Intl.DateTimeFormat(locale, { timeStyle: \"short\" })\n\n\nexport function isDateBeforeToday(date: Date) {\n return new Date(date.toDateString()) < new Date(new Date().toDateString());\n}\n\nexport function isPastDate(date: Date) {\n return date < new Date();\n}\n\nexport function convertToGermanDateFormat(dateString: string): string {\n // Ensure the input is in the expected US format YYYY-MM-DD\n const datePattern = /^\\d{4}-\\d{2}-\\d{2}$/;\n\n if (!datePattern.test(dateString)) {\n return dateString;\n }\n\n // Split the date string into components\n const [year, month, day] = dateString.split(\"-\");\n\n // Construct the German date format DD.MM.YYYY\n return `${day}.${month}.${year}`;\n}\n","import { CONFIG } from \"./config.ts\";\n\nconst CACHE: { [key: string]: any } = {}\n\nexport const fetchApi = async (url: string, offlineHandler?: () => void) => {\n let response = CACHE[url];\n\n if (!response) {\n try {\n const networkResponse = await fetch(`${CONFIG.API_BASE}${url}`.replace(/([^:])(\\/\\/+)/g, '$1/'));\n\n response = await networkResponse.json();\n CACHE[url] = response;\n } catch (error) {\n if (error instanceof Error && isOfflineError(error)) {\n if (offlineHandler) {\n return offlineHandler();\n }\n }\n\n throw error;\n }\n }\n\n return response;\n};\n\nfunction isOfflineError(error: Error): boolean {\n if (error.name === 'TypeError' && error.message.includes('Failed to fetch') && !window.navigator.onLine) {\n return true;\n }\n\n return false;\n}","import type { League } from \"../model/League\"\nimport {fetchApi} from \"../fetch.ts\";\n\ntype ApiLeague = {\n slug: string;\n name: string;\n shortName: string;\n};\n\n\nexport class LeagueRepository {\n public static async findAll(): Promise {\n const apiLeagues = (await fetchApi(`/api/leagues.json`, () => [])) as ApiLeague[];\n\n return apiLeagues.map(v => {\n return {\n id: v.slug,\n name: v.name,\n shortName: v.shortName\n }\n })\n }\n\n public static async findById(id: string): Promise {\n const league = (await this.findAll()).find((league) => league.id === id)\n\n if (!league) {\n throw new Error(`League ${id} not found`)\n }\n\n return league\n }\n}\n","import {fetchApi} from \"../fetch.ts\";\nimport {Team} from \"../model/Team.ts\";\nimport {CONFIG} from \"../config.ts\";\n\ntype ApiTeam = {\n id: string,\n name: string,\n nameShort?: string,\n logo: string\n};\n\nexport abstract class TeamRepository {\n private static TEAM_MAPPING: { [key: string]: string } = {\n \"Hard Bulls\": \"hb_1\",\n \"Hard Bulls Bandidos\": \"hb_2\",\n \"Hard Bulls Bullets\": \"hb_3\",\n \"Hard Barons\": \"hb_4_sp\",\n \"Hard Bulls U8\": \"hb_1\",\n \"Hard Bulls U10\": \"hb_1\",\n \"Hard Bulls U12\": \"hb_1\",\n \"Hard Bulls U13\": \"hb_1\",\n \"Hard Bulls U14\": \"hb_1\",\n \"Hard Bulls U15\": \"hb_1\",\n \"Hard Bulls U16\": \"hb_1\",\n \"Feldkirch Cardinals\": \"fc_1\",\n \"Feldkirch Cardinals U8\": \"fc_1\",\n \"Feldkirch Cardinals U10\": \"fc_1\",\n \"Feldkirch Cardinals U12\": \"fc_1\",\n \"Feldkirch Cardinals U14\": \"fc_1\",\n \"Feldkirch Cardinals U16\": \"fc_1\",\n \"Feldkirch Cardinals 2\": \"fc_1\",\n \"Feldkirch Cardinals 3\": \"fc_1\",\n \"Diving Ducks Wr. Neustadt\": \"dd_1\",\n \"Vienna Wanderers\": \"vw_1\",\n \"Vienna Wanderers 2\": \"vw_1\",\n \"Vienna Metrostars\": \"vm_1\",\n \"Vienna Metrostars 2\": \"vm_1\",\n \"Schwechat Blue Bats\": \"bb_1\",\n \"Traiskirchen Grasshoppers\": \"gh_1\",\n \"Dornbirn Indians\": \"di_1\",\n \"Dornbirn Indians 2\": \"di_1\",\n \"Dornbirn Indians 3\": \"di_1\",\n \"Dornbirn Indians Minis U8\": \"di_1\",\n \"Dornbirn Indians Kids U10\": \"di_1\",\n \"Dornbirn Little Indians U12\": \"di_1\",\n \"Dornbirn Indians Ponies U14\": \"di_1\",\n \"Dornbirn Legends\": \"di_2_sp\",\n \"Dornbirn Redhawks\": \"di_3_sp\",\n \"Dornbirn Bears\": \"di_4_sp\",\n \"ASAK Athletics\": \"aa_1\",\n \"Dirty Sox Graz\": \"ds_1\",\n \"Kufstein Vikings\": \"kv_1\",\n \"Kufstein Vikings U14\": \"kv_1\",\n \"Schwaz Tigers\": \"st_1\",\n \"Feldkirch Angry Balls\": \"fc_2_sp\",\n \"Centurions Wels\": \"cw_1\",\n \"SG Indians - Vikings U16\": \"di_kv_1\",\n \"SG Indians - Bulls\": \"di_hb_1\",\n \"Feldkirch Falcons\": \"fc_2_fp\",\n \"Wil Pirates\": \"ch-wp_1\",\n \"Baldham Boars\": \"de-bb_1\",\n \"Zürich Challengers\": \"ch-zc_1\",\n \"Pee Wees St. Pölten\": \"pw_1_fp\",\n \"SG Crazy Chicklets - Metrostars\": \"cc_vw_1_fp\",\n };\n\n public static async findAll(): Promise {\n const teams = (await fetchApi(`/api/teams.json`, () => [])) as ApiTeam[];\n\n return teams.map(v => {\n return {\n id: v.id,\n name: v.name,\n nameShort: v.nameShort,\n logo: `${CONFIG.API_BASE}assets/teams/${v.logo}`,\n }\n })\n }\n\n public static async findByName(name: string): Promise {\n const teams = await TeamRepository.findAll();\n\n for (const team of teams) {\n for (const [mappingName, mappingId] of Object.entries(TeamRepository.TEAM_MAPPING)) {\n if (mappingName.trim().toLowerCase() === name.trim().toLowerCase()) {\n if (team.id === mappingId) {\n return team;\n }\n }\n }\n\n }\n\n throw new Error(`Team ${name} not found!`);\n }\n}\n","import type { Field } from \"../model/Field\"\nimport {fetchApi} from \"../fetch.ts\";\nimport {CONFIG} from \"../config.ts\";\ntype ApiField = {\n teams: string[];\n location: string;\n venue: string|null;\n image?: string|null;\n keywords: string[];\n};\n\nexport class FieldRepository {\n private static FIELD_CACHE: { [key: string]: Field } = {};\n\n public static async findAll(): Promise {\n const apiFields = (await fetchApi(`/api/fields.json`, () => [])) as ApiField[];\n\n return apiFields.map(v => {\n return {\n teams: v.teams,\n location: v.location,\n venue: v.venue,\n image: v.image ? `${CONFIG.API_BASE}assets/fields/${v.image}` : undefined,\n keywords: v.keywords\n }\n })\n }\n\n public static async findByKeyword(keyword: string): Promise {\n let cachedField = FieldRepository.FIELD_CACHE[keyword];\n \n if (cachedField) {\n return cachedField\n }\n \n if (keyword.trim() === \",\") {\n return undefined\n }\n \n const field = (await FieldRepository.findAll()).find((field) => {\n return field.keywords.includes(keyword)\n }) || undefined;\n \n if (field) {\n FieldRepository.FIELD_CACHE[keyword] = field;\n }\n \n return field;\n }\n}\n","import { Game } from \"../model/Game.ts\";\nimport { isPastDate } from \"../date\";\nimport {fetchApi} from \"../fetch.ts\";\nimport {LeagueRepository} from \"./LeagueRepository.ts\";\nimport {TeamRepository} from \"./TeamRepository.ts\";\nimport { FieldRepository } from \"./FieldRepository.ts\";\n\ntype ApiGame = {\n venue: string;\n home: string;\n away: string;\n awayScore?: number;\n homeScore?: number;\n status: \"scheduled\" | \"finished\" | \"canceled\";\n date: string;\n league: string;\n season: number;\n};\n\nexport abstract class GamesRepository {\n public static async findScheduledBySeasonAndLeague(season: number, league: string, onlyFutureGames: boolean): Promise {\n const apiGames = ( await fetchApi(`/api/seasons/${season}/${league}/games.json`, () => [])) as ApiGame[];\n const result: Game[] = [];\n\n for (const apiGame of apiGames) {\n const gameDateTime = new Date(apiGame.date);\n const includeGame = onlyFutureGames ? !isPastDate(gameDateTime) && apiGame.status === \"scheduled\" : true;\n\n if (includeGame) {\n result.push({\n home: (await TeamRepository.findByName(apiGame.home)),\n away: (await TeamRepository.findByName(apiGame.away)),\n homeScore: apiGame.homeScore,\n awayScore: apiGame.awayScore,\n venue: apiGame.venue ? (await FieldRepository.findByKeyword(apiGame.venue)) : undefined,\n date: gameDateTime,\n league: await LeagueRepository.findById(apiGame.league),\n });\n }\n }\n\n return Object.values(result).sort((a, b) => a.date.getTime() - b.date.getTime());\n }\n}\n","import { translate } from \"./translations.ts\";\nimport { GamesRepository } from \"./repository/GamesRepository.ts\";\nimport { CONFIG } from \"./config.ts\";\nimport { Game } from \"./model/Game\";\nimport { Storage } from './storage/Storage.ts'\n\nexport class GamesPage extends HTMLElement {\n private shadow: ShadowRoot;\n private bullsGames: Game[] = [];\n private noBullsGames?: boolean;\n private noUserGames?: boolean;\n private showPastGames?: boolean;\n private userGames: Game[] = [];\n private userLeagues: string[] = [];\n private isLoading = true;\n\n constructor() {\n super();\n\n this.shadow = this.attachShadow({ mode: 'open' });\n }\n\n private update() {\n if (this.isLoading) {\n this.shadow.innerHTML = `\n \n `\n } else {\n this.shadow.innerHTML = `\n \n \n \n ${translate(\"app.games.tab-teams\")}\n \n \n ${translate(\"app.games.tab-bulls\")}\n \n \n\n \n \n \n \n \n ${this.noUserGames ? this.renderNoGames() : this.renderGameCards(this.userGames)}\n \n \n \n \n \n ${this.noBullsGames ? this.renderNoGames() : this.renderGameCards(this.bullsGames)}\n \n \n \n \n \n \n `\n }\n }\n\n private renderNoGames(): string {\n return `\n \n \n ${translate(\"app.games.no-games\")}\n \n \n `;\n }\n\n private renderGameCards(games: Game[]): string {\n return games.map(game => {\n return `\n \n \n `\n }).join('');\n }\n\n connectedCallback() {\n (async () => {\n this.isLoading = true;\n this.update();\n\n let update = false;\n const showPastGames = Storage.getShowPastGames();\n\n if (this.bullsGames.length === 0 || this.showPastGames !== showPastGames) {\n for (const league of CONFIG.BULLS_LEAGUES) {\n this.bullsGames.push(...(await GamesRepository.findScheduledBySeasonAndLeague(CONFIG.SEASON, league, !showPastGames)));\n }\n \n this.bullsGames = this.sortGames(this.bullsGames);\n\n update = true;\n }\n\n this.noBullsGames = this.bullsGames.length === 0;\n\n const userLeagues = Storage.getLeagues();\n\n if (userLeagues.length !== this.userLeagues.length || userLeagues.sort().join() !== this.userLeagues.sort().join() || this.showPastGames !== showPastGames) {\n this.userLeagues = userLeagues;\n\n const userGames = [];\n\n for (const league of userLeagues) {\n userGames.push(...await (GamesRepository.findScheduledBySeasonAndLeague(CONFIG.SEASON, league, !showPastGames)))\n }\n\n this.userGames = this.sortGames(userGames);\n update = true;\n }\n\n this.noUserGames = this.userGames.length === 0;\n this.showPastGames = showPastGames;\n this.isLoading = false;\n\n if (update) {\n this.update();\n }\n\n })();\n }\n\n private sortGames(games: Game[]) {\n return games.sort((a: Game, b: Game) => {\n if (a.date.getTime() > b.date.getTime()) {\n return 1\n }\n \n if (a.date.getTime() < b.date.getTime()) {\n return -1\n }\n \n return 0\n });\n }\n}\n\n","import {dateFormatter, timeFormatter} from \"./date.ts\";\n\nexport class GameCard extends HTMLElement {\n static observedAttributes = [\"home\", \"away\", \"date\", \"league\", \"venue\", \"background\"];\n private shadow: ShadowRoot;\n\n constructor() {\n super();\n\n this.shadow = this.attachShadow({ mode: 'open'});\n this.update();\n }\n\n attributeChangedCallback(\n name: string,\n oldValue: string | null,\n newValue: string | null,\n ) {\n if (GameCard.observedAttributes.includes(name) && oldValue !== newValue) {\n this.update();\n }\n }\n\n private update() {\n const home = this.getAttribute('home') || '';\n const away = this.getAttribute('away') || '';\n const homeLogo = this.getAttribute('homeLogo') || '';\n const awayLogo = this.getAttribute('awayLogo') || '';\n const background = this.getAttribute('background') || undefined;\n const league = this.getAttribute('league') || '';\n const venue = this.getAttribute('venue') || '';\n const dateString = this.getAttribute('date') || new Date('1970');\n const date = new Date(dateString);\n \n this.shadow.innerHTML = `\n \n \n \n \n \n \n \n \n \"${away}\"\n \n \n ${away}\n \n \n \n \n \n —\n \n \n \n \n \n \"${home}\"\n \n \n ${home}\n \n \n \n \n \n \n \n \n \n ${dateFormatter.format(date)}\n \n \n \n \n \n ${timeFormatter.format(date)}\n \n \n \n \n \n ${venue}\n \n \n \n \n ${ league ? `\n \n \n \n \n ${league}\n \n \n \n \n ` : ''\n }\n \n \n `;\n }\n \n}\n\n","import {LeagueRepository} from \"./repository/LeagueRepository.ts\";\nimport {League} from \"./model/League.ts\";\nimport {Storage} from './storage/Storage.ts'\nimport {RadioGroup, Select, Switch} from '@arjanfrans/web-components-ui';\nimport {translate} from \"./translations.ts\";\n\nexport class SettingsPage extends HTMLElement {\n private shadow: ShadowRoot;\n private leagues: League[] = [];\n private selectedLeagueIds: string[] = [];\n\n constructor() {\n super();\n\n this.shadow = this.attachShadow({mode: 'open'});\n }\n\n private update() {\n this.shadow.innerHTML = `\n \n \n \n ${translate(\"app.settings.my-teams\")}\n \n \n \n \n \n \n \n ${translate(\"app.settings.games\")}\n \n \n \n \n \n \n \n \n \n ${translate(\"app.settings.display\")}\n \n \n \n \n ${translate(\"app.settings.theme\")}\n \n \n \n \n \n ${translate(\"app.settings.theme.auto\")}\n \n \n ${translate(\"app.settings.theme.light\")}\n \n \n ${translate(\"app.settings.theme.dark\")}\n \n \n \n \n \n \n \n ${translate(\"app.settings.language\")}\n \n \n \n \n \n \n \n \n \n ${translate(\"app.settings.about\")}\n \n\n \n \n ${translate(\"app.settings.outdated\")}\n \n\n \n ${translate(\"app.settings.legal\")}\n \n \n \n ${translate(\"app.settings.version\")} ${import.meta.env.VITE_LIBRARY_VERSION}\n \n \n \n \n `\n\n this.renderMyTeamCheckboxes(this.leagues)\n\n\n const languageSelect = this.shadow.querySelector('#language-select') as Select\n\n languageSelect.addEventListener('select-change', (event: CustomEvent) => {\n if (Storage.getLanguage() !== event.detail.value) {\n Storage.setLanguage(event.detail.value)\n\n if (confirm(translate('app.settings.reload'))) {\n window.location.reload()\n }\n }\n })\n\n languageSelect.setAttribute(\"selected\", Storage.getLanguage());\n\n const showPastGamesSwitch = this.shadow.querySelector('#show-past-games')!\n\n showPastGamesSwitch.addEventListener('change', (event: Event) => {\n Storage.setShowPastGames((event.target as Switch).checked)\n });\n\n if (Storage.getShowPastGames()) {\n showPastGamesSwitch.setAttribute(\"checked\", \"checked\")\n } else {\n showPastGamesSwitch.removeAttribute(\"checked\")\n }\n\n const showPastEventsSwitch = this.shadow.querySelector('#show-past-events')!\n\n showPastEventsSwitch.addEventListener('change', (event: Event) => {\n Storage.setShowPastEvents((event.target as Switch).checked)\n });\n\n if (Storage.getShowPastEvents()) {\n showPastEventsSwitch.setAttribute(\"checked\", \"checked\")\n } else {\n showPastEventsSwitch.removeAttribute(\"checked\")\n }\n\n const appThemeRadioGroup = this.shadow.querySelector('#app-theme')! as HTMLElement&RadioGroup\n appThemeRadioGroup.setAttribute(\"selected\", Storage.getTheme())\n\n appThemeRadioGroup.addEventListener('radio-selected', (event: CustomEvent) => {\n Storage.setTheme(event.detail.value)\n\n const theme = document.querySelector('x-theme')!\n\n theme.setAttribute('theme', Storage.getTheme());\n })\n }\n\n private renderMyTeamCheckboxes(leagues: League[]): void {\n const container = this.shadow.querySelector('#select-my-teams')!\n\n container.append(...leagues.map(league => {\n const checkbox = new Switch();\n\n checkbox.setAttribute('label', league.name);\n\n checkbox.addEventListener('change', (event: Event) => {\n if ((event.target as Switch).checked) {\n Storage.addLeague(league.id)\n } else {\n Storage.removeLeague(league.id)\n }\n\n this.selectedLeagueIds = Storage.getLeagues();\n })\n\n checkbox.checked = this.selectedLeagueIds.includes(league.id);\n\n return checkbox;\n }));\n }\n\n connectedCallback() {\n (async () => {\n this.leagues = await LeagueRepository.findAll();\n this.selectedLeagueIds.push(...Storage.getLeagues());\n\n this.update();\n })()\n }\n}\n\n","import { Router } from \"./Router.ts\";\nimport { Storage } from \"../storage/Storage\"; // Assuming Storage is globally accessible\n\nexport class Route extends HTMLElement {\n static get observedAttributes() {\n return ['path', 'default'];\n }\n\n private lastState: string | null = null;\n\n connectedCallback() {\n Router.register(this);\n\n // Check if the current route matches any of the comma-separated paths\n if (!this.isMatchingPath()) {\n this.style.display = 'none';\n }\n\n if (Router.current() === '' && this.isDefault) {\n this.style.display = 'block';\n }\n }\n\n disconnectedCallback() {\n Router.unregister(this);\n }\n\n get path() {\n return this.getAttribute('path') || '';\n }\n\n get isDefault() {\n return this.hasAttribute('default');\n }\n\n set path(value: string) {\n this.setAttribute('path', value);\n }\n\n public isMatchingPath() {\n const paths = this.path.split(',').map(p => p.trim());\n return paths.includes(Router.current());\n }\n\n show() {\n this.style.display = 'block';\n\n const currentState = Storage.getStateString();\n\n if (this.lastState !== currentState) {\n // If the state has changed, clone and replace the content\n this.lastState = currentState;\n\n this.childNodes.forEach((v) => {\n const clone = v.cloneNode(true);\n this.replaceChild(clone, v);\n });\n }\n\n }\n\n hide() {\n this.style.display = 'none';\n }\n}\n","import type {Event} from \"../model/Event\"\nimport {fetchApi} from \"../fetch.ts\";\nimport {CONFIG} from \"../config.ts\";\nimport {isPastDate} from \"../date.ts\";\n\ntype ApiEvent = {\n title: string;\n description?: string;\n date: string;\n venue: string;\n logo?: string;\n};\n\n\nexport class EventRepository {\n public static async findAll(onlyFutureEvents: boolean): Promise {\n const apiEvents = (await fetchApi(`/api/events.json`, () => [])) as ApiEvent[];\n\n return apiEvents.map(v => {\n return {\n ...v,\n logo: `${CONFIG.API_BASE}assets/events/${v.logo}`,\n date: new Date(v.date)\n }\n })\n .filter(v => onlyFutureEvents ? !isPastDate(v.date) : true)\n .sort((a, b) => a.date.getTime() - b.date.getTime())\n }\n}\n","import {translate} from \"./translations.ts\";\nimport {Event} from \"./model/Event\";\nimport {Storage} from './storage/Storage.ts'\nimport {EventRepository} from \"./repository/EventRepository.ts\";\n\nexport class EventsPage extends HTMLElement {\n private shadow: ShadowRoot;\n private events: Event[] = [];\n private noEvents?: boolean;\n private showPastEvents?: boolean;\n private isLoading = true;\n\n constructor() {\n super();\n\n this.shadow = this.attachShadow({mode: 'open'});\n }\n\n private update() {\n if (this.isLoading) {\n this.shadow.innerHTML = `\n \n `\n } else {\n this.shadow.innerHTML = `\n \n \n \n ${this.noEvents ? this.renderNoEvents() : this.renderEventCards(this.events)}\n \n \n \n `\n }\n }\n\n private renderNoEvents(): string {\n return `\n \n \n ${translate(\"app.events.no-events\")}\n \n \n `;\n }\n\n private renderEventCards(events: Event[]): string {\n return events.map(event => {\n return `\n \n \n `\n }).join('');\n }\n\n connectedCallback() {\n (async () => {\n let update = false;\n this.isLoading = true;\n this.update();\n\n const showPastEvents = Storage.getShowPastEvents();\n\n if (this.events.length === 0 || this.showPastEvents !== showPastEvents) {\n this.events.push(...(await EventRepository.findAll(!showPastEvents)));\n\n update = true;\n }\n\n this.noEvents = this.events.length === 0;\n this.showPastEvents = showPastEvents;\n\n this.isLoading = false;\n\n if (update) {\n this.update();\n }\n })();\n }\n}\n\n","import {dateTimeFormatter} from \"./date.ts\";\n\nexport class EventCard extends HTMLElement {\n static observedAttributes = [\"title\", \"description\", \"date\", \"venue\", \"logo\"];\n private shadow: ShadowRoot;\n\n constructor() {\n super();\n\n this.shadow = this.attachShadow({mode: 'open'});\n const style = document.createElement(\"style\");\n\n style.textContent = `\n :host {\n display: block;\n width: 100%;\n min-width: 370px;\n }\n `;\n\n this.shadow.appendChild(style);\n\n this.update();\n }\n\n attributeChangedCallback(\n name: string,\n oldValue: string | null,\n newValue: string | null,\n ) {\n if (EventCard.observedAttributes.includes(name) && oldValue !== newValue) {\n this.update();\n }\n }\n\n private update() {\n const title = this.getAttribute('title') || '';\n const description = this.getAttribute('description') || undefined;\n const logo = this.getAttribute('logo') || undefined;\n const venue = this.getAttribute('venue');\n const dateString = this.getAttribute('date') || new Date('1970');\n const date = new Date(dateString);\n\n this.shadow.innerHTML = `\n \n ${logo ? `` : ''}\n \n \n \n \n ${title}\n \n \n \n \n \n \n ${dateTimeFormatter.format(date)}\n \n \n \n \n ${venue}\n \n \n \n \n \n \n ${\n description ?\n `\n \n ${description}\n \n ` : ''\n }\n \n \n \n `;\n }\n}\n\n","export class Splash extends HTMLElement {\n constructor() {\n super();\n\n // Attach the shadow root\n const shadow = this.attachShadow({ mode: \"open\" });\n\n const style = document.createElement(\"style\");\n\n style.textContent = `\n :host {\n display: block;\n width: 100vw;\n height: 100vh;\n color: var(--semantic-text-highlight);\n position: fixed;\n top: 0;\n left: 0;\n z-index: 999;\n opacity: 1;\n transition: opacity 1s ease-in-out;\n pointer-events: none;\n background-repeat: no-repeat;\n background-size: cover;\n background-position: center;\n }\n\n /* Styles for portrait orientation */\n @media (orientation: portrait) {\n :host {\n background-image: url(\"/images/background_portrait.webp\");\n }\n }\n\n /* Styles for landscape orientation */\n @media (orientation: landscape) {\n :host {\n background-image: url(\"/images/background_landscape.webp\");\n }\n }\n\n .logo {\n display: flex;\n justify-content: center;\n height: 100vh;\n width: 100%;\n align-items: center;\n filter: drop-shadow(2px 10px 10px #000000);\n opacity: 0; /* Start hidden */\n animation: fadeIn 1.1s ease-in forwards; /* Fast fade-in effect */\n }\n\n /* Fade-in animation for the logo */\n @keyframes fadeIn {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n }\n `;\n\n shadow.appendChild(style);\n\n const logo = document.createElement('div');\n\n logo.classList.add('logo');\n\n logo.innerHTML = `\n \n `\n\n shadow.append(logo);\n }\n}\n","import {BeforeInstallPromptEvent} from \"../types\";\n\nlet installPromptEvent: BeforeInstallPromptEvent|undefined = undefined;\n\nexport async function isPWAInstalled(): Promise {\n // Check for iOS Safari\n if (\n window.matchMedia(\"(display-mode: standalone)\").matches ||\n (\"standalone\" in window.navigator && window.navigator.standalone)\n ) {\n return true;\n }\n\n // Check for other platforms (Android, Chrome, etc.)\n if (\n \"getInstalledRelatedApps\" in navigator &&\n typeof navigator.getInstalledRelatedApps === \"function\"\n ) {\n const relatedApps = await navigator.getInstalledRelatedApps();\n return relatedApps.length > 0;\n }\n\n return false;\n}\n\nexport function registerInstallPromptListener() {\n window.addEventListener(\"beforeinstallprompt\", (event) => {\n event.preventDefault();\n\n installPromptEvent = (event as BeforeInstallPromptEvent);\n\n console.log(\"Install prompt event detected\");\n })\n}\n\nexport function getInstallPromptEvent(timeout: number = 5000): Promise {\n return new Promise((resolve) => {\n const startTime = Date.now();\n\n const checkEvent = () => {\n if (installPromptEvent) {\n resolve(installPromptEvent); // Resolve immediately if event is available\n } else if (Date.now() - startTime < timeout) {\n setTimeout(checkEvent, 100); // Check every 100ms until timeout\n } else {\n resolve(undefined); // Resolve with undefined after timeout\n }\n };\n\n checkEvent(); // Start checking immediately\n });\n}\n\nexport function registerServiceWorker(): void {\n if (\"serviceWorker\" in navigator) {\n window.addEventListener(\"load\", () => {\n const swFile = '/service-worker.js'\n const scope = '/'\n\n navigator.serviceWorker\n .register(swFile, { scope, type: 'module' })\n .then((registration) => {\n console.log(\n \"ServiceWorker registration successful with scope: \",\n registration.scope,\n );\n })\n .catch((error) => {\n console.log(\"ServiceWorker registration failed: \", error);\n });\n });\n }\n}\n","import {translate} from \"./translations.ts\";\nimport {getInstallPromptEvent, isPWAInstalled} from \"./pwa/install.ts\";\n\nexport class Header extends HTMLElement {\n private shadow: ShadowRoot;\n\n constructor() {\n super();\n this.shadow = this.attachShadow({mode: 'open'});\n this.shadow.innerHTML = `\n \n \n \n \n \n \n \n ${translate(\"app.title\")}\n \n \n \n \n \n \n `\n }\n\n\n connectedCallback() {\n (async () => {\n if (await isPWAInstalled() || !(await getInstallPromptEvent())) {\n return;\n }\n\n\n const topRightElement = this.shadow.querySelector('#top-right')!\n\n topRightElement.innerHTML = `\n \n `;\n\n const installPrompt = topRightElement.querySelector('#install')!\n\n installPrompt.addEventListener('click', async () => {\n const installPromptEvent = await getInstallPromptEvent();\n\n if (installPromptEvent) {\n await installPromptEvent.prompt();\n\n installPromptEvent.userChoice.then((choiceResult) => {\n if (choiceResult.outcome === \"accepted\") {\n console.log(\"User accepted the A2HS prompt\");\n } else {\n console.log(\"User dismissed the A2HS prompt\");\n\n return;\n }\n\n window.location.reload();\n return;\n });\n }\n });\n })();\n }\n\n}\n\n\n","export class Loading extends HTMLElement {\n private shadow: ShadowRoot;\n\n constructor() {\n super();\n\n this.shadow = this.attachShadow({mode: 'open'});\n this.shadow.innerHTML = `\n \n\n \n \n \n `\n }\n\n\n}\n\n","import './style.css'\n\nimport {Storage} from './storage/Storage'\nimport {configurePrefix, Container, loadComponents, waitForComponents} from \"@arjanfrans/web-components-ui\";\nimport {Shell} from \"./Shell.ts\";\nimport {GamesPage} from \"./GamesPage.ts\";\nimport {GameCard} from \"./GameCard.ts\";\nimport {SettingsPage} from \"./SettingsPage.ts\";\nimport {Router} from \"./router/Router.ts\";\nimport {Route} from \"./router/Route.ts\";\nimport {EventsPage} from \"./EventsPage.ts\";\nimport {EventCard} from \"./EventCard.ts\";\nimport { Splash } from './Splash.ts';\nimport {Header} from \"./Header.ts\";\nimport {registerInstallPromptListener, registerServiceWorker} from \"./pwa/install.ts\";\nimport { Loading } from './Loading.ts';\n\nregisterInstallPromptListener();\n\nconfigurePrefix('x');\nwaitForComponents();\n\nloadComponents();\n\nconst theme = document.querySelector('x-theme')!\n\ntheme.setAttribute('theme', Storage.getTheme());\n\ncustomElements.define('hb-loading', Loading);\ncustomElements.define('hb-splash', Splash);\ncustomElements.define('hb-route', Route);\ncustomElements.define('hb-router', Router);\ncustomElements.define('hb-shell', Shell);\ncustomElements.define('hb-header', Header);\ncustomElements.define('hb-settings-page', SettingsPage);\ncustomElements.define('hb-games-page', GamesPage);\ncustomElements.define('hb-events-page', EventsPage);\ncustomElements.define('hb-game-card', GameCard);\ncustomElements.define('hb-event-card', EventCard);\n\ndocument.querySelector('x-container')!.append(new Shell());\n\nregisterServiceWorker();\n"],"names":["league","field","Switch","configurePrefix","waitForComponents","loadComponents"],"mappings":"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,CAAA,OAAA,CAAA,CAAA,KAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA,GAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,QAAA,CAAA,CAAA,QAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,QAAA,CAAA,CAAA,MAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,KAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA,GAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA,GAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,KAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAw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AA,CAAA,CAAA,MAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,UAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,SAAA,CAAA,CAAA,GAAA,CAAA,CAAA,GAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,UAAA,CAAA,CAAA,CAAA,EAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,UAAA,CAAA,CAAA,CAAA,GAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CA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AA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA,OAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,UAAA,CAAA,CAAA,OAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,OAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA,OAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,UAAA,CAAA,CAAA,OAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,OAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CA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A,CAAA,GAAA,CAAA,EAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,GAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,KAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA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AA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAA,CAAA,IAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,OAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,QAAA,CAAA,CAAA,QAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA,GAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA,GAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CAAA,KAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,UAAA,CAAA,EAAA,CAAA,MAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA,KAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAA,CAAA,IAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAA,OAAA,CAAA,CAAA,MAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAA,KAAA,CAAA,CAAA,MAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CAAA,CAAA,OAAA,CAAA,EAAA,CAAA,IAAA,CAAA,GAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAA,MAAA,CAAA,CAAA,IAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,IAAA,CAAA,GAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA;;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,OAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,CAAA,MAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,MAAA;;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,QAAA,CAAA,KAAA,CAAA,MAAA,CAAA,EAAA,CAAA,MAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,MAAA,CAAA,CAAA,CAAA,EAAA,CAAA,MAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,GAAA,CAAA,OAAA,CAAA,UAAA,CAAA,KAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,EAAA,CAAA,CAAA,OAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,IAAA,CAAA,CAAA,KAAA,CAAA,CAAA,OAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,IAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,IAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CAAA,CAAA,EAAA,CAAA,MAAA,CAAA,IAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,IAAA,CAAA,CAAA,QAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA,CAAA,EAAA,CAAA,QAAA,CAAA,IAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,EAAA,CAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,GAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,GAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,UAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,IAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,KAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,UAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,CAAA,KAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,EAAA,CAAA,CAAA,KAAA,CAAA,IAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,UAAA,CAAA,MAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,IAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,IAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,UAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,CAAA,KAAA,CAAA,QAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,EAAA,CAAA,CAAA,MAAA,CAAA,IAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,UAAA,CAAA,MAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,IAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,IAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,QAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,UAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,CAAA,KAAA,CAAA,IAAA,CAAA,KAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,EAAA,CAAA,CAAA,QAAA,CAAA,IAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,UAAA,CAAA,MAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CA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A,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,UAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,QAAA,CAAA,CAAA,QAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA,GAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA,GAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAA,CAAA,KAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,QAAA,CAAA,CAAA,QAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAA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AAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,UAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CAAA,OAAA,CAAA,CAAA,QAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,UAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,C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,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAM1B,KAAK;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,UAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAKpB,MAAS,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CA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CAAA,CAAA,CAAA,CAAA,CAAA,GAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAQf,WACI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,OAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CAAA,OAAA,CAAA,CAAA,KAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,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","x_google_ignoreList":[1]} \ No newline at end of file diff --git a/service-worker.js b/service-worker.js index c544e47..1e5544b 100644 --- a/service-worker.js +++ b/service-worker.js @@ -1,2774 +1,2 @@ -(function () { - 'use strict'; - - // @ts-ignore - try { - self['workbox:core:7.2.0'] && _(); - } - catch (e) { } - - const logger = null ; - - const fallback = (code, ...args) => { - let msg = code; - if (args.length > 0) { - msg += ` :: ${JSON.stringify(args)}`; - } - return msg; - }; - const messageGenerator = fallback ; - - /* - Copyright 2018 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - /** - * Workbox errors should be thrown with this class. - * This allows use to ensure the type easily in tests, - * helps developers identify errors from workbox - * easily and allows use to optimise error - * messages correctly. - * - * @private - */ - class WorkboxError extends Error { - /** - * - * @param {string} errorCode The error code that - * identifies this particular error. - * @param {Object=} details Any relevant arguments - * that will help developers identify issues should - * be added as a key on the context object. - */ - constructor(errorCode, details) { - const message = messageGenerator(errorCode, details); - super(message); - this.name = errorCode; - this.details = details; - } - } - - /* - Copyright 2018 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - // Callbacks to be executed whenever there's a quota error. - // Can't change Function type right now. - // eslint-disable-next-line @typescript-eslint/ban-types - const quotaErrorCallbacks = new Set(); - - function registerQuotaErrorCallback(callback) { - quotaErrorCallbacks.add(callback); - } - - /* - Copyright 2018 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - const _cacheNameDetails = { - googleAnalytics: 'googleAnalytics', - precache: 'precache-v2', - prefix: 'workbox', - runtime: 'runtime', - suffix: typeof registration !== 'undefined' ? registration.scope : '', - }; - const _createCacheName = (cacheName) => { - return [_cacheNameDetails.prefix, cacheName, _cacheNameDetails.suffix] - .filter((value) => value && value.length > 0) - .join('-'); - }; - const eachCacheNameDetail = (fn) => { - for (const key of Object.keys(_cacheNameDetails)) { - fn(key); - } - }; - const cacheNames = { - updateDetails: (details) => { - eachCacheNameDetail((key) => { - if (typeof details[key] === 'string') { - _cacheNameDetails[key] = details[key]; - } - }); - }, - getGoogleAnalyticsName: (userCacheName) => { - return userCacheName || _createCacheName(_cacheNameDetails.googleAnalytics); - }, - getPrecacheName: (userCacheName) => { - return userCacheName || _createCacheName(_cacheNameDetails.precache); - }, - getPrefix: () => { - return _cacheNameDetails.prefix; - }, - getRuntimeName: (userCacheName) => { - return userCacheName || _createCacheName(_cacheNameDetails.runtime); - }, - getSuffix: () => { - return _cacheNameDetails.suffix; - }, - }; - - /* - Copyright 2020 Google LLC - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - function stripParams(fullURL, ignoreParams) { - const strippedURL = new URL(fullURL); - for (const param of ignoreParams) { - strippedURL.searchParams.delete(param); - } - return strippedURL.href; - } - /** - * Matches an item in the cache, ignoring specific URL params. This is similar - * to the `ignoreSearch` option, but it allows you to ignore just specific - * params (while continuing to match on the others). - * - * @private - * @param {Cache} cache - * @param {Request} request - * @param {Object} matchOptions - * @param {Array} ignoreParams - * @return {Promise} - */ - async function cacheMatchIgnoreParams(cache, request, ignoreParams, matchOptions) { - const strippedRequestURL = stripParams(request.url, ignoreParams); - // If the request doesn't include any ignored params, match as normal. - if (request.url === strippedRequestURL) { - return cache.match(request, matchOptions); - } - // Otherwise, match by comparing keys - const keysOptions = Object.assign(Object.assign({}, matchOptions), { ignoreSearch: true }); - const cacheKeys = await cache.keys(request, keysOptions); - for (const cacheKey of cacheKeys) { - const strippedCacheKeyURL = stripParams(cacheKey.url, ignoreParams); - if (strippedRequestURL === strippedCacheKeyURL) { - return cache.match(cacheKey, matchOptions); - } - } - return; - } - - /* - Copyright 2019 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - let supportStatus; - /** - * A utility function that determines whether the current browser supports - * constructing a new `Response` from a `response.body` stream. - * - * @return {boolean} `true`, if the current browser can successfully - * construct a `Response` from a `response.body` stream, `false` otherwise. - * - * @private - */ - function canConstructResponseFromBodyStream() { - if (supportStatus === undefined) { - const testResponse = new Response(''); - if ('body' in testResponse) { - try { - new Response(testResponse.body); - supportStatus = true; - } - catch (error) { - supportStatus = false; - } - } - supportStatus = false; - } - return supportStatus; - } - - /* - Copyright 2019 Google LLC - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - /** - * A helper function that prevents a promise from being flagged as unused. - * - * @private - **/ - function dontWaitFor(promise) { - // Effective no-op. - void promise.then(() => { }); - } - - /* - Copyright 2018 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - /** - * The Deferred class composes Promises in a way that allows for them to be - * resolved or rejected from outside the constructor. In most cases promises - * should be used directly, but Deferreds can be necessary when the logic to - * resolve a promise must be separate. - * - * @private - */ - class Deferred { - /** - * Creates a promise and exposes its resolve and reject functions as methods. - */ - constructor() { - this.promise = new Promise((resolve, reject) => { - this.resolve = resolve; - this.reject = reject; - }); - } - } - - async function executeQuotaErrorCallbacks() { - for (const callback of quotaErrorCallbacks) { - await callback(); - } - } - - /* - Copyright 2018 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - const getFriendlyURL = (url) => { - const urlObj = new URL(String(url), location.href); - // See https://github.com/GoogleChrome/workbox/issues/2323 - // We want to include everything, except for the origin if it's same-origin. - return urlObj.href.replace(new RegExp(`^${location.origin}`), ''); - }; - - /* - Copyright 2019 Google LLC - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - /** - * Returns a promise that resolves and the passed number of milliseconds. - * This utility is an async/await-friendly version of `setTimeout`. - * - * @param {number} ms - * @return {Promise} - * @private - */ - function timeout(ms) { - return new Promise((resolve) => setTimeout(resolve, ms)); - } - - /* - Copyright 2020 Google LLC - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - /** - * A utility method that makes it easier to use `event.waitUntil` with - * async functions and return the result. - * - * @param {ExtendableEvent} event - * @param {Function} asyncFn - * @return {Function} - * @private - */ - function waitUntil(event, asyncFn) { - const returnPromise = asyncFn(); - event.waitUntil(returnPromise); - return returnPromise; - } - - /* - Copyright 2019 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - /** - * Allows developers to copy a response and modify its `headers`, `status`, - * or `statusText` values (the values settable via a - * [`ResponseInit`]{@link https://developer.mozilla.org/en-US/docs/Web/API/Response/Response#Syntax} - * object in the constructor). - * To modify these values, pass a function as the second argument. That - * function will be invoked with a single object with the response properties - * `{headers, status, statusText}`. The return value of this function will - * be used as the `ResponseInit` for the new `Response`. To change the values - * either modify the passed parameter(s) and return it, or return a totally - * new object. - * - * This method is intentionally limited to same-origin responses, regardless of - * whether CORS was used or not. - * - * @param {Response} response - * @param {Function} modifier - * @memberof workbox-core - */ - async function copyResponse(response, modifier) { - let origin = null; - // If response.url isn't set, assume it's cross-origin and keep origin null. - if (response.url) { - const responseURL = new URL(response.url); - origin = responseURL.origin; - } - if (origin !== self.location.origin) { - throw new WorkboxError('cross-origin-copy-response', { origin }); - } - const clonedResponse = response.clone(); - // Create a fresh `ResponseInit` object by cloning the headers. - const responseInit = { - headers: new Headers(clonedResponse.headers), - status: clonedResponse.status, - statusText: clonedResponse.statusText, - }; - // Apply any user modifications. - const modifiedResponseInit = responseInit; - // Create the new response from the body stream and `ResponseInit` - // modifications. Note: not all browsers support the Response.body stream, - // so fall back to reading the entire body into memory as a blob. - const body = canConstructResponseFromBodyStream() - ? clonedResponse.body - : await clonedResponse.blob(); - return new Response(body, modifiedResponseInit); - } - - /* - Copyright 2019 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - /** - * Claim any currently available clients once the service worker - * becomes active. This is normally used in conjunction with `skipWaiting()`. - * - * @memberof workbox-core - */ - function clientsClaim() { - self.addEventListener('activate', () => self.clients.claim()); - } - - // @ts-ignore - try { - self['workbox:routing:7.2.0'] && _(); - } - catch (e) { } - - /* - Copyright 2018 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - /** - * The default HTTP method, 'GET', used when there's no specific method - * configured for a route. - * - * @type {string} - * - * @private - */ - const defaultMethod = 'GET'; - - const normalizeHandler = (handler) => { - if (handler && typeof handler === "object") { - return handler; - } else { - return { handle: handler }; - } - }; - - class Route { - /** - * Constructor for Route class. - * - * @param {workbox-routing~matchCallback} match - * A callback function that determines whether the route matches a given - * `fetch` event by returning a non-falsy value. - * @param {workbox-routing~handlerCallback} handler A callback - * function that returns a Promise resolving to a Response. - * @param {string} [method='GET'] The HTTP method to match the Route - * against. - */ - constructor(match, handler, method = defaultMethod) { - this.handler = normalizeHandler(handler); - this.match = match; - this.method = method; - } - /** - * - * @param {workbox-routing-handlerCallback} handler A callback - * function that returns a Promise resolving to a Response - */ - setCatchHandler(handler) { - this.catchHandler = normalizeHandler(handler); - } - } - - class RegExpRoute extends Route { - /** - * If the regular expression contains - * [capture groups]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#grouping-back-references}, - * the captured values will be passed to the - * {@link workbox-routing~handlerCallback} `params` - * argument. - * - * @param {RegExp} regExp The regular expression to match against URLs. - * @param {workbox-routing~handlerCallback} handler A callback - * function that returns a Promise resulting in a Response. - * @param {string} [method='GET'] The HTTP method to match the Route - * against. - */ - constructor(regExp, handler, method) { - const match = ({ url }) => { - const result = regExp.exec(url.href); - if (!result) { - return; - } - if (url.origin !== location.origin && result.index !== 0) { - return; - } - return result.slice(1); - }; - super(match, handler, method); - } - } - - class Router { - /** - * Initializes a new Router. - */ - constructor() { - this._routes = /* @__PURE__ */ new Map(); - this._defaultHandlerMap = /* @__PURE__ */ new Map(); - } - /** - * @return {Map>} routes A `Map` of HTTP - * method name ('GET', etc.) to an array of all the corresponding `Route` - * instances that are registered. - */ - get routes() { - return this._routes; - } - /** - * Adds a fetch event listener to respond to events when a route matches - * the event's request. - */ - addFetchListener() { - self.addEventListener("fetch", (event) => { - const { request } = event; - const responsePromise = this.handleRequest({ request, event }); - if (responsePromise) { - event.respondWith(responsePromise); - } - }); - } - /** - * Adds a message event listener for URLs to cache from the window. - * This is useful to cache resources loaded on the page prior to when the - * service worker started controlling it. - * - * The format of the message data sent from the window should be as follows. - * Where the `urlsToCache` array may consist of URL strings or an array of - * URL string + `requestInit` object (the same as you'd pass to `fetch()`). - * - * ``` - * { - * type: 'CACHE_URLS', - * payload: { - * urlsToCache: [ - * './script1.js', - * './script2.js', - * ['./script3.js', {mode: 'no-cors'}], - * ], - * }, - * } - * ``` - */ - addCacheListener() { - self.addEventListener("message", (event) => { - if (event.data && event.data.type === "CACHE_URLS") { - const { payload } = event.data; - const requestPromises = Promise.all(payload.urlsToCache.map((entry) => { - if (typeof entry === "string") { - entry = [entry]; - } - const request = new Request(...entry); - return this.handleRequest({ request, event }); - })); - event.waitUntil(requestPromises); - if (event.ports && event.ports[0]) { - void requestPromises.then(() => event.ports[0].postMessage(true)); - } - } - }); - } - /** - * Apply the routing rules to a FetchEvent object to get a Response from an - * appropriate Route's handler. - * - * @param {Object} options - * @param {Request} options.request The request to handle. - * @param {ExtendableEvent} options.event The event that triggered the - * request. - * @return {Promise|undefined} A promise is returned if a - * registered route can handle the request. If there is no matching - * route and there's no `defaultHandler`, `undefined` is returned. - */ - handleRequest({ request, event }) { - const url = new URL(request.url, location.href); - if (!url.protocol.startsWith("http")) { - return; - } - const sameOrigin = url.origin === location.origin; - const { params, route } = this.findMatchingRoute({ - event, - request, - sameOrigin, - url - }); - let handler = route && route.handler; - const method = request.method; - if (!handler && this._defaultHandlerMap.has(method)) { - handler = this._defaultHandlerMap.get(method); - } - if (!handler) { - return; - } - let responsePromise; - try { - responsePromise = handler.handle({ url, request, event, params }); - } catch (err) { - responsePromise = Promise.reject(err); - } - const catchHandler = route && route.catchHandler; - if (responsePromise instanceof Promise && (this._catchHandler || catchHandler)) { - responsePromise = responsePromise.catch(async (err) => { - if (catchHandler) { - try { - return await catchHandler.handle({ url, request, event, params }); - } catch (catchErr) { - if (catchErr instanceof Error) { - err = catchErr; - } - } - } - if (this._catchHandler) { - return this._catchHandler.handle({ url, request, event }); - } - throw err; - }); - } - return responsePromise; - } - /** - * Checks a request and URL (and optionally an event) against the list of - * registered routes, and if there's a match, returns the corresponding - * route along with any params generated by the match. - * - * @param {Object} options - * @param {URL} options.url - * @param {boolean} options.sameOrigin The result of comparing `url.origin` - * against the current origin. - * @param {Request} options.request The request to match. - * @param {Event} options.event The corresponding event. - * @return {Object} An object with `route` and `params` properties. - * They are populated if a matching route was found or `undefined` - * otherwise. - */ - findMatchingRoute({ url, sameOrigin, request, event }) { - const routes = this._routes.get(request.method) || []; - for (const route of routes) { - let params; - const matchResult = route.match({ url, sameOrigin, request, event }); - if (matchResult) { - params = matchResult; - if (Array.isArray(params) && params.length === 0) { - params = void 0; - } else if (matchResult.constructor === Object && // eslint-disable-line - Object.keys(matchResult).length === 0) { - params = void 0; - } else if (typeof matchResult === "boolean") { - params = void 0; - } - return { route, params }; - } - } - return {}; - } - /** - * Define a default `handler` that's called when no routes explicitly - * match the incoming request. - * - * Each HTTP method ('GET', 'POST', etc.) gets its own default handler. - * - * Without a default handler, unmatched requests will go against the - * network as if there were no service worker present. - * - * @param {workbox-routing~handlerCallback} handler A callback - * function that returns a Promise resulting in a Response. - * @param {string} [method='GET'] The HTTP method to associate with this - * default handler. Each method has its own default. - */ - setDefaultHandler(handler, method = defaultMethod) { - this._defaultHandlerMap.set(method, normalizeHandler(handler)); - } - /** - * If a Route throws an error while handling a request, this `handler` - * will be called and given a chance to provide a response. - * - * @param {workbox-routing~handlerCallback} handler A callback - * function that returns a Promise resulting in a Response. - */ - setCatchHandler(handler) { - this._catchHandler = normalizeHandler(handler); - } - /** - * Registers a route with the router. - * - * @param {workbox-routing.Route} route The route to register. - */ - registerRoute(route) { - if (!this._routes.has(route.method)) { - this._routes.set(route.method, []); - } - this._routes.get(route.method).push(route); - } - /** - * Unregisters a route with the router. - * - * @param {workbox-routing.Route} route The route to unregister. - */ - unregisterRoute(route) { - if (!this._routes.has(route.method)) { - throw new WorkboxError("unregister-route-but-not-found-with-method", { - method: route.method - }); - } - const routeIndex = this._routes.get(route.method).indexOf(route); - if (routeIndex > -1) { - this._routes.get(route.method).splice(routeIndex, 1); - } else { - throw new WorkboxError("unregister-route-route-not-registered"); - } - } - } - - /* - Copyright 2019 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - let defaultRouter; - /** - * Creates a new, singleton Router instance if one does not exist. If one - * does already exist, that instance is returned. - * - * @private - * @return {Router} - */ - const getOrCreateDefaultRouter = () => { - if (!defaultRouter) { - defaultRouter = new Router(); - // The helpers that use the default Router assume these listeners exist. - defaultRouter.addFetchListener(); - defaultRouter.addCacheListener(); - } - return defaultRouter; - }; - - function registerRoute(capture, handler, method) { - let route; - if (typeof capture === "string") { - const captureUrl = new URL(capture, location.href); - const matchCallback = ({ url }) => { - return url.href === captureUrl.href; - }; - route = new Route(matchCallback, handler, method); - } else if (capture instanceof RegExp) { - route = new RegExpRoute(capture, handler, method); - } else if (typeof capture === "function") { - route = new Route(capture, handler, method); - } else if (capture instanceof Route) { - route = capture; - } else { - throw new WorkboxError("unsupported-route-type", { - moduleName: "workbox-routing", - funcName: "registerRoute", - paramName: "capture" - }); - } - const defaultRouter = getOrCreateDefaultRouter(); - defaultRouter.registerRoute(route); - return route; - } - - // @ts-ignore - try { - self['workbox:strategies:7.2.0'] && _(); - } - catch (e) { } - - function toRequest(input) { - return typeof input === "string" ? new Request(input) : input; - } - class StrategyHandler { - /** - * Creates a new instance associated with the passed strategy and event - * that's handling the request. - * - * The constructor also initializes the state that will be passed to each of - * the plugins handling this request. - * - * @param {workbox-strategies.Strategy} strategy - * @param {Object} options - * @param {Request|string} options.request A request to run this strategy for. - * @param {ExtendableEvent} options.event The event associated with the - * request. - * @param {URL} [options.url] - * @param {*} [options.params] The return value from the - * {@link workbox-routing~matchCallback} (if applicable). - */ - constructor(strategy, options) { - this._cacheKeys = {}; - Object.assign(this, options); - this.event = options.event; - this._strategy = strategy; - this._handlerDeferred = new Deferred(); - this._extendLifetimePromises = []; - this._plugins = [...strategy.plugins]; - this._pluginStateMap = /* @__PURE__ */ new Map(); - for (const plugin of this._plugins) { - this._pluginStateMap.set(plugin, {}); - } - this.event.waitUntil(this._handlerDeferred.promise); - } - /** - * Fetches a given request (and invokes any applicable plugin callback - * methods) using the `fetchOptions` (for non-navigation requests) and - * `plugins` defined on the `Strategy` object. - * - * The following plugin lifecycle methods are invoked when using this method: - * - `requestWillFetch()` - * - `fetchDidSucceed()` - * - `fetchDidFail()` - * - * @param {Request|string} input The URL or request to fetch. - * @return {Promise} - */ - async fetch(input) { - const { event } = this; - let request = toRequest(input); - if (request.mode === "navigate" && event instanceof FetchEvent && event.preloadResponse) { - const possiblePreloadResponse = await event.preloadResponse; - if (possiblePreloadResponse) { - return possiblePreloadResponse; - } - } - const originalRequest = this.hasCallback("fetchDidFail") ? request.clone() : null; - try { - for (const cb of this.iterateCallbacks("requestWillFetch")) { - request = await cb({ request: request.clone(), event }); - } - } catch (err) { - if (err instanceof Error) { - throw new WorkboxError("plugin-error-request-will-fetch", { - thrownErrorMessage: err.message - }); - } - } - const pluginFilteredRequest = request.clone(); - try { - let fetchResponse; - fetchResponse = await fetch(request, request.mode === "navigate" ? void 0 : this._strategy.fetchOptions); - if (false) ; - for (const callback of this.iterateCallbacks("fetchDidSucceed")) { - fetchResponse = await callback({ - event, - request: pluginFilteredRequest, - response: fetchResponse - }); - } - return fetchResponse; - } catch (error) { - if (originalRequest) { - await this.runCallbacks("fetchDidFail", { - error, - event, - originalRequest: originalRequest.clone(), - request: pluginFilteredRequest.clone() - }); - } - throw error; - } - } - /** - * Calls `this.fetch()` and (in the background) runs `this.cachePut()` on - * the response generated by `this.fetch()`. - * - * The call to `this.cachePut()` automatically invokes `this.waitUntil()`, - * so you do not have to manually call `waitUntil()` on the event. - * - * @param {Request|string} input The request or URL to fetch and cache. - * @return {Promise} - */ - async fetchAndCachePut(input) { - const response = await this.fetch(input); - const responseClone = response.clone(); - void this.waitUntil(this.cachePut(input, responseClone)); - return response; - } - /** - * Matches a request from the cache (and invokes any applicable plugin - * callback methods) using the `cacheName`, `matchOptions`, and `plugins` - * defined on the strategy object. - * - * The following plugin lifecycle methods are invoked when using this method: - * - cacheKeyWillBeUsed() - * - cachedResponseWillBeUsed() - * - * @param {Request|string} key The Request or URL to use as the cache key. - * @return {Promise} A matching response, if found. - */ - async cacheMatch(key) { - const request = toRequest(key); - let cachedResponse; - const { cacheName, matchOptions } = this._strategy; - const effectiveRequest = await this.getCacheKey(request, "read"); - const multiMatchOptions = Object.assign(Object.assign({}, matchOptions), { cacheName }); - cachedResponse = await caches.match(effectiveRequest, multiMatchOptions); - for (const callback of this.iterateCallbacks("cachedResponseWillBeUsed")) { - cachedResponse = await callback({ - cacheName, - matchOptions, - cachedResponse, - request: effectiveRequest, - event: this.event - }) || void 0; - } - return cachedResponse; - } - /** - * Puts a request/response pair in the cache (and invokes any applicable - * plugin callback methods) using the `cacheName` and `plugins` defined on - * the strategy object. - * - * The following plugin lifecycle methods are invoked when using this method: - * - cacheKeyWillBeUsed() - * - cacheWillUpdate() - * - cacheDidUpdate() - * - * @param {Request|string} key The request or URL to use as the cache key. - * @param {Response} response The response to cache. - * @return {Promise} `false` if a cacheWillUpdate caused the response - * not be cached, and `true` otherwise. - */ - async cachePut(key, response) { - const request = toRequest(key); - await timeout(0); - const effectiveRequest = await this.getCacheKey(request, "write"); - if (!response) { - throw new WorkboxError("cache-put-with-no-response", { - url: getFriendlyURL(effectiveRequest.url) - }); - } - const responseToCache = await this._ensureResponseSafeToCache(response); - if (!responseToCache) { - return false; - } - const { cacheName, matchOptions } = this._strategy; - const cache = await self.caches.open(cacheName); - const hasCacheUpdateCallback = this.hasCallback("cacheDidUpdate"); - const oldResponse = hasCacheUpdateCallback ? await cacheMatchIgnoreParams( - // TODO(philipwalton): the `__WB_REVISION__` param is a precaching - // feature. Consider into ways to only add this behavior if using - // precaching. - cache, - effectiveRequest.clone(), - ["__WB_REVISION__"], - matchOptions - ) : null; - try { - await cache.put(effectiveRequest, hasCacheUpdateCallback ? responseToCache.clone() : responseToCache); - } catch (error) { - if (error instanceof Error) { - if (error.name === "QuotaExceededError") { - await executeQuotaErrorCallbacks(); - } - throw error; - } - } - for (const callback of this.iterateCallbacks("cacheDidUpdate")) { - await callback({ - cacheName, - oldResponse, - newResponse: responseToCache.clone(), - request: effectiveRequest, - event: this.event - }); - } - return true; - } - /** - * Checks the list of plugins for the `cacheKeyWillBeUsed` callback, and - * executes any of those callbacks found in sequence. The final `Request` - * object returned by the last plugin is treated as the cache key for cache - * reads and/or writes. If no `cacheKeyWillBeUsed` plugin callbacks have - * been registered, the passed request is returned unmodified - * - * @param {Request} request - * @param {string} mode - * @return {Promise} - */ - async getCacheKey(request, mode) { - const key = `${request.url} | ${mode}`; - if (!this._cacheKeys[key]) { - let effectiveRequest = request; - for (const callback of this.iterateCallbacks("cacheKeyWillBeUsed")) { - effectiveRequest = toRequest(await callback({ - mode, - request: effectiveRequest, - event: this.event, - // params has a type any can't change right now. - params: this.params - // eslint-disable-line - })); - } - this._cacheKeys[key] = effectiveRequest; - } - return this._cacheKeys[key]; - } - /** - * Returns true if the strategy has at least one plugin with the given - * callback. - * - * @param {string} name The name of the callback to check for. - * @return {boolean} - */ - hasCallback(name) { - for (const plugin of this._strategy.plugins) { - if (name in plugin) { - return true; - } - } - return false; - } - /** - * Runs all plugin callbacks matching the given name, in order, passing the - * given param object (merged ith the current plugin state) as the only - * argument. - * - * Note: since this method runs all plugins, it's not suitable for cases - * where the return value of a callback needs to be applied prior to calling - * the next callback. See - * {@link workbox-strategies.StrategyHandler#iterateCallbacks} - * below for how to handle that case. - * - * @param {string} name The name of the callback to run within each plugin. - * @param {Object} param The object to pass as the first (and only) param - * when executing each callback. This object will be merged with the - * current plugin state prior to callback execution. - */ - async runCallbacks(name, param) { - for (const callback of this.iterateCallbacks(name)) { - await callback(param); - } - } - /** - * Accepts a callback and returns an iterable of matching plugin callbacks, - * where each callback is wrapped with the current handler state (i.e. when - * you call each callback, whatever object parameter you pass it will - * be merged with the plugin's current state). - * - * @param {string} name The name fo the callback to run - * @return {Array} - */ - *iterateCallbacks(name) { - for (const plugin of this._strategy.plugins) { - if (typeof plugin[name] === "function") { - const state = this._pluginStateMap.get(plugin); - const statefulCallback = (param) => { - const statefulParam = Object.assign(Object.assign({}, param), { state }); - return plugin[name](statefulParam); - }; - yield statefulCallback; - } - } - } - /** - * Adds a promise to the - * [extend lifetime promises]{@link https://w3c.github.io/ServiceWorker/#extendableevent-extend-lifetime-promises} - * of the event event associated with the request being handled (usually a - * `FetchEvent`). - * - * Note: you can await - * {@link workbox-strategies.StrategyHandler~doneWaiting} - * to know when all added promises have settled. - * - * @param {Promise} promise A promise to add to the extend lifetime promises - * of the event that triggered the request. - */ - waitUntil(promise) { - this._extendLifetimePromises.push(promise); - return promise; - } - /** - * Returns a promise that resolves once all promises passed to - * {@link workbox-strategies.StrategyHandler~waitUntil} - * have settled. - * - * Note: any work done after `doneWaiting()` settles should be manually - * passed to an event's `waitUntil()` method (not this handler's - * `waitUntil()` method), otherwise the service worker thread my be killed - * prior to your work completing. - */ - async doneWaiting() { - let promise; - while (promise = this._extendLifetimePromises.shift()) { - await promise; - } - } - /** - * Stops running the strategy and immediately resolves any pending - * `waitUntil()` promises. - */ - destroy() { - this._handlerDeferred.resolve(null); - } - /** - * This method will call cacheWillUpdate on the available plugins (or use - * status === 200) to determine if the Response is safe and valid to cache. - * - * @param {Request} options.request - * @param {Response} options.response - * @return {Promise} - * - * @private - */ - async _ensureResponseSafeToCache(response) { - let responseToCache = response; - let pluginsUsed = false; - for (const callback of this.iterateCallbacks("cacheWillUpdate")) { - responseToCache = await callback({ - request: this.request, - response: responseToCache, - event: this.event - }) || void 0; - pluginsUsed = true; - if (!responseToCache) { - break; - } - } - if (!pluginsUsed) { - if (responseToCache && responseToCache.status !== 200) { - responseToCache = void 0; - } - } - return responseToCache; - } - } - - class Strategy { - /** - * Creates a new instance of the strategy and sets all documented option - * properties as public instance properties. - * - * Note: if a custom strategy class extends the base Strategy class and does - * not need more than these properties, it does not need to define its own - * constructor. - * - * @param {Object} [options] - * @param {string} [options.cacheName] Cache name to store and retrieve - * requests. Defaults to the cache names provided by - * {@link workbox-core.cacheNames}. - * @param {Array} [options.plugins] [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins} - * to use in conjunction with this caching strategy. - * @param {Object} [options.fetchOptions] Values passed along to the - * [`init`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters) - * of [non-navigation](https://github.com/GoogleChrome/workbox/issues/1796) - * `fetch()` requests made by this strategy. - * @param {Object} [options.matchOptions] The - * [`CacheQueryOptions`]{@link https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions} - * for any `cache.match()` or `cache.put()` calls made by this strategy. - */ - constructor(options = {}) { - this.cacheName = cacheNames.getRuntimeName(options.cacheName); - this.plugins = options.plugins || []; - this.fetchOptions = options.fetchOptions; - this.matchOptions = options.matchOptions; - } - /** - * Perform a request strategy and returns a `Promise` that will resolve with - * a `Response`, invoking all relevant plugin callbacks. - * - * When a strategy instance is registered with a Workbox - * {@link workbox-routing.Route}, this method is automatically - * called when the route matches. - * - * Alternatively, this method can be used in a standalone `FetchEvent` - * listener by passing it to `event.respondWith()`. - * - * @param {FetchEvent|Object} options A `FetchEvent` or an object with the - * properties listed below. - * @param {Request|string} options.request A request to run this strategy for. - * @param {ExtendableEvent} options.event The event associated with the - * request. - * @param {URL} [options.url] - * @param {*} [options.params] - */ - handle(options) { - const [responseDone] = this.handleAll(options); - return responseDone; - } - /** - * Similar to {@link workbox-strategies.Strategy~handle}, but - * instead of just returning a `Promise` that resolves to a `Response` it - * it will return an tuple of `[response, done]` promises, where the former - * (`response`) is equivalent to what `handle()` returns, and the latter is a - * Promise that will resolve once any promises that were added to - * `event.waitUntil()` as part of performing the strategy have completed. - * - * You can await the `done` promise to ensure any extra work performed by - * the strategy (usually caching responses) completes successfully. - * - * @param {FetchEvent|Object} options A `FetchEvent` or an object with the - * properties listed below. - * @param {Request|string} options.request A request to run this strategy for. - * @param {ExtendableEvent} options.event The event associated with the - * request. - * @param {URL} [options.url] - * @param {*} [options.params] - * @return {Array} A tuple of [response, done] - * promises that can be used to determine when the response resolves as - * well as when the handler has completed all its work. - */ - handleAll(options) { - if (options instanceof FetchEvent) { - options = { - event: options, - request: options.request - }; - } - const event = options.event; - const request = typeof options.request === "string" ? new Request(options.request) : options.request; - const params = "params" in options ? options.params : void 0; - const handler = new StrategyHandler(this, { event, request, params }); - const responseDone = this._getResponse(handler, request, event); - const handlerDone = this._awaitComplete(responseDone, handler, request, event); - return [responseDone, handlerDone]; - } - async _getResponse(handler, request, event) { - await handler.runCallbacks("handlerWillStart", { event, request }); - let response = void 0; - try { - response = await this._handle(request, handler); - if (!response || response.type === "error") { - throw new WorkboxError("no-response", { url: request.url }); - } - } catch (error) { - if (error instanceof Error) { - for (const callback of handler.iterateCallbacks("handlerDidError")) { - response = await callback({ error, event, request }); - if (response) { - break; - } - } - } - if (!response) { - throw error; - } - } - for (const callback of handler.iterateCallbacks("handlerWillRespond")) { - response = await callback({ event, request, response }); - } - return response; - } - async _awaitComplete(responseDone, handler, request, event) { - let response; - let error; - try { - response = await responseDone; - } catch (error2) { - } - try { - await handler.runCallbacks("handlerDidRespond", { - event, - request, - response - }); - await handler.doneWaiting(); - } catch (waitUntilError) { - if (waitUntilError instanceof Error) { - error = waitUntilError; - } - } - await handler.runCallbacks("handlerDidComplete", { - event, - request, - response, - error - }); - handler.destroy(); - if (error) { - throw error; - } - } - } - - class CacheFirst extends Strategy { - /** - * @private - * @param {Request|string} request A request to run this strategy for. - * @param {workbox-strategies.StrategyHandler} handler The event that - * triggered the request. - * @return {Promise} - */ - async _handle(request, handler) { - let response = await handler.cacheMatch(request); - let error = void 0; - if (!response) { - try { - response = await handler.fetchAndCachePut(request); - } catch (err) { - if (err instanceof Error) { - error = err; - } - } - } - if (!response) { - throw new WorkboxError("no-response", { url: request.url, error }); - } - return response; - } - } - - /* - Copyright 2018 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - const cacheOkAndOpaquePlugin = { - /** - * Returns a valid response (to allow caching) if the status is 200 (OK) or - * 0 (opaque). - * - * @param {Object} options - * @param {Response} options.response - * @return {Response|null} - * - * @private - */ - cacheWillUpdate: async ({ response }) => { - if (response.status === 200 || response.status === 0) { - return response; - } - return null; - }, - }; - - class StaleWhileRevalidate extends Strategy { - /** - * @param {Object} [options] - * @param {string} [options.cacheName] Cache name to store and retrieve - * requests. Defaults to cache names provided by - * {@link workbox-core.cacheNames}. - * @param {Array} [options.plugins] [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins} - * to use in conjunction with this caching strategy. - * @param {Object} [options.fetchOptions] Values passed along to the - * [`init`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters) - * of [non-navigation](https://github.com/GoogleChrome/workbox/issues/1796) - * `fetch()` requests made by this strategy. - * @param {Object} [options.matchOptions] [`CacheQueryOptions`](https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions) - */ - constructor(options = {}) { - super(options); - if (!this.plugins.some((p) => "cacheWillUpdate" in p)) { - this.plugins.unshift(cacheOkAndOpaquePlugin); - } - } - /** - * @private - * @param {Request|string} request A request to run this strategy for. - * @param {workbox-strategies.StrategyHandler} handler The event that - * triggered the request. - * @return {Promise} - */ - async _handle(request, handler) { - const fetchAndCachePromise = handler.fetchAndCachePut(request).catch(() => { - }); - void handler.waitUntil(fetchAndCachePromise); - let response = await handler.cacheMatch(request); - let error; - if (response) ; else { - try { - response = await fetchAndCachePromise; - } catch (err) { - if (err instanceof Error) { - error = err; - } - } - } - if (!response) { - throw new WorkboxError("no-response", { url: request.url, error }); - } - return response; - } - } - - function escapeRegExp(value) { - return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); - } - - const instanceOfAny = (object, constructors) => constructors.some((c) => object instanceof c); - - let idbProxyableTypes; - let cursorAdvanceMethods; - // This is a function to prevent it throwing up in node environments. - function getIdbProxyableTypes() { - return (idbProxyableTypes || - (idbProxyableTypes = [ - IDBDatabase, - IDBObjectStore, - IDBIndex, - IDBCursor, - IDBTransaction, - ])); - } - // This is a function to prevent it throwing up in node environments. - function getCursorAdvanceMethods() { - return (cursorAdvanceMethods || - (cursorAdvanceMethods = [ - IDBCursor.prototype.advance, - IDBCursor.prototype.continue, - IDBCursor.prototype.continuePrimaryKey, - ])); - } - const cursorRequestMap = new WeakMap(); - const transactionDoneMap = new WeakMap(); - const transactionStoreNamesMap = new WeakMap(); - const transformCache = new WeakMap(); - const reverseTransformCache = new WeakMap(); - function promisifyRequest(request) { - const promise = new Promise((resolve, reject) => { - const unlisten = () => { - request.removeEventListener('success', success); - request.removeEventListener('error', error); - }; - const success = () => { - resolve(wrap(request.result)); - unlisten(); - }; - const error = () => { - reject(request.error); - unlisten(); - }; - request.addEventListener('success', success); - request.addEventListener('error', error); - }); - promise - .then((value) => { - // Since cursoring reuses the IDBRequest (*sigh*), we cache it for later retrieval - // (see wrapFunction). - if (value instanceof IDBCursor) { - cursorRequestMap.set(value, request); - } - // Catching to avoid "Uncaught Promise exceptions" - }) - .catch(() => { }); - // This mapping exists in reverseTransformCache but doesn't doesn't exist in transformCache. This - // is because we create many promises from a single IDBRequest. - reverseTransformCache.set(promise, request); - return promise; - } - function cacheDonePromiseForTransaction(tx) { - // Early bail if we've already created a done promise for this transaction. - if (transactionDoneMap.has(tx)) - return; - const done = new Promise((resolve, reject) => { - const unlisten = () => { - tx.removeEventListener('complete', complete); - tx.removeEventListener('error', error); - tx.removeEventListener('abort', error); - }; - const complete = () => { - resolve(); - unlisten(); - }; - const error = () => { - reject(tx.error || new DOMException('AbortError', 'AbortError')); - unlisten(); - }; - tx.addEventListener('complete', complete); - tx.addEventListener('error', error); - tx.addEventListener('abort', error); - }); - // Cache it for later retrieval. - transactionDoneMap.set(tx, done); - } - let idbProxyTraps = { - get(target, prop, receiver) { - if (target instanceof IDBTransaction) { - // Special handling for transaction.done. - if (prop === 'done') - return transactionDoneMap.get(target); - // Polyfill for objectStoreNames because of Edge. - if (prop === 'objectStoreNames') { - return target.objectStoreNames || transactionStoreNamesMap.get(target); - } - // Make tx.store return the only store in the transaction, or undefined if there are many. - if (prop === 'store') { - return receiver.objectStoreNames[1] - ? undefined - : receiver.objectStore(receiver.objectStoreNames[0]); - } - } - // Else transform whatever we get back. - return wrap(target[prop]); - }, - set(target, prop, value) { - target[prop] = value; - return true; - }, - has(target, prop) { - if (target instanceof IDBTransaction && - (prop === 'done' || prop === 'store')) { - return true; - } - return prop in target; - }, - }; - function replaceTraps(callback) { - idbProxyTraps = callback(idbProxyTraps); - } - function wrapFunction(func) { - // Due to expected object equality (which is enforced by the caching in `wrap`), we - // only create one new func per func. - // Edge doesn't support objectStoreNames (booo), so we polyfill it here. - if (func === IDBDatabase.prototype.transaction && - !('objectStoreNames' in IDBTransaction.prototype)) { - return function (storeNames, ...args) { - const tx = func.call(unwrap(this), storeNames, ...args); - transactionStoreNamesMap.set(tx, storeNames.sort ? storeNames.sort() : [storeNames]); - return wrap(tx); - }; - } - // Cursor methods are special, as the behaviour is a little more different to standard IDB. In - // IDB, you advance the cursor and wait for a new 'success' on the IDBRequest that gave you the - // cursor. It's kinda like a promise that can resolve with many values. That doesn't make sense - // with real promises, so each advance methods returns a new promise for the cursor object, or - // undefined if the end of the cursor has been reached. - if (getCursorAdvanceMethods().includes(func)) { - return function (...args) { - // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use - // the original object. - func.apply(unwrap(this), args); - return wrap(cursorRequestMap.get(this)); - }; - } - return function (...args) { - // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use - // the original object. - return wrap(func.apply(unwrap(this), args)); - }; - } - function transformCachableValue(value) { - if (typeof value === 'function') - return wrapFunction(value); - // This doesn't return, it just creates a 'done' promise for the transaction, - // which is later returned for transaction.done (see idbObjectHandler). - if (value instanceof IDBTransaction) - cacheDonePromiseForTransaction(value); - if (instanceOfAny(value, getIdbProxyableTypes())) - return new Proxy(value, idbProxyTraps); - // Return the same value back if we're not going to transform it. - return value; - } - function wrap(value) { - // We sometimes generate multiple promises from a single IDBRequest (eg when cursoring), because - // IDB is weird and a single IDBRequest can yield many responses, so these can't be cached. - if (value instanceof IDBRequest) - return promisifyRequest(value); - // If we've already transformed this value before, reuse the transformed value. - // This is faster, but it also provides object equality. - if (transformCache.has(value)) - return transformCache.get(value); - const newValue = transformCachableValue(value); - // Not all types are transformed. - // These may be primitive types, so they can't be WeakMap keys. - if (newValue !== value) { - transformCache.set(value, newValue); - reverseTransformCache.set(newValue, value); - } - return newValue; - } - const unwrap = (value) => reverseTransformCache.get(value); - - /** - * Open a database. - * - * @param name Name of the database. - * @param version Schema version. - * @param callbacks Additional callbacks. - */ - function openDB(name, version, { blocked, upgrade, blocking, terminated } = {}) { - const request = indexedDB.open(name, version); - const openPromise = wrap(request); - if (upgrade) { - request.addEventListener('upgradeneeded', (event) => { - upgrade(wrap(request.result), event.oldVersion, event.newVersion, wrap(request.transaction), event); - }); - } - if (blocked) { - request.addEventListener('blocked', (event) => blocked( - // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405 - event.oldVersion, event.newVersion, event)); - } - openPromise - .then((db) => { - if (terminated) - db.addEventListener('close', () => terminated()); - if (blocking) { - db.addEventListener('versionchange', (event) => blocking(event.oldVersion, event.newVersion, event)); - } - }) - .catch(() => { }); - return openPromise; - } - /** - * Delete a database. - * - * @param name Name of the database. - */ - function deleteDB(name, { blocked } = {}) { - const request = indexedDB.deleteDatabase(name); - if (blocked) { - request.addEventListener('blocked', (event) => blocked( - // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405 - event.oldVersion, event)); - } - return wrap(request).then(() => undefined); - } - - const readMethods = ['get', 'getKey', 'getAll', 'getAllKeys', 'count']; - const writeMethods = ['put', 'add', 'delete', 'clear']; - const cachedMethods = new Map(); - function getMethod(target, prop) { - if (!(target instanceof IDBDatabase && - !(prop in target) && - typeof prop === 'string')) { - return; - } - if (cachedMethods.get(prop)) - return cachedMethods.get(prop); - const targetFuncName = prop.replace(/FromIndex$/, ''); - const useIndex = prop !== targetFuncName; - const isWrite = writeMethods.includes(targetFuncName); - if ( - // Bail if the target doesn't exist on the target. Eg, getAll isn't in Edge. - !(targetFuncName in (useIndex ? IDBIndex : IDBObjectStore).prototype) || - !(isWrite || readMethods.includes(targetFuncName))) { - return; - } - const method = async function (storeName, ...args) { - // isWrite ? 'readwrite' : undefined gzipps better, but fails in Edge :( - const tx = this.transaction(storeName, isWrite ? 'readwrite' : 'readonly'); - let target = tx.store; - if (useIndex) - target = target.index(args.shift()); - // Must reject if op rejects. - // If it's a write operation, must reject if tx.done rejects. - // Must reject with op rejection first. - // Must resolve with op value. - // Must handle both promises (no unhandled rejections) - return (await Promise.all([ - target[targetFuncName](...args), - isWrite && tx.done, - ]))[0]; - }; - cachedMethods.set(prop, method); - return method; - } - replaceTraps((oldTraps) => ({ - ...oldTraps, - get: (target, prop, receiver) => getMethod(target, prop) || oldTraps.get(target, prop, receiver), - has: (target, prop) => !!getMethod(target, prop) || oldTraps.has(target, prop), - })); - - // @ts-ignore - try { - self['workbox:expiration:7.2.0'] && _(); - } - catch (e) { } - - /* - Copyright 2018 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - const DB_NAME = 'workbox-expiration'; - const CACHE_OBJECT_STORE = 'cache-entries'; - const normalizeURL = (unNormalizedUrl) => { - const url = new URL(unNormalizedUrl, location.href); - url.hash = ''; - return url.href; - }; - /** - * Returns the timestamp model. - * - * @private - */ - class CacheTimestampsModel { - /** - * - * @param {string} cacheName - * - * @private - */ - constructor(cacheName) { - this._db = null; - this._cacheName = cacheName; - } - /** - * Performs an upgrade of indexedDB. - * - * @param {IDBPDatabase} db - * - * @private - */ - _upgradeDb(db) { - // TODO(philipwalton): EdgeHTML doesn't support arrays as a keyPath, so we - // have to use the `id` keyPath here and create our own values (a - // concatenation of `url + cacheName`) instead of simply using - // `keyPath: ['url', 'cacheName']`, which is supported in other browsers. - const objStore = db.createObjectStore(CACHE_OBJECT_STORE, { keyPath: 'id' }); - // TODO(philipwalton): once we don't have to support EdgeHTML, we can - // create a single index with the keyPath `['cacheName', 'timestamp']` - // instead of doing both these indexes. - objStore.createIndex('cacheName', 'cacheName', { unique: false }); - objStore.createIndex('timestamp', 'timestamp', { unique: false }); - } - /** - * Performs an upgrade of indexedDB and deletes deprecated DBs. - * - * @param {IDBPDatabase} db - * - * @private - */ - _upgradeDbAndDeleteOldDbs(db) { - this._upgradeDb(db); - if (this._cacheName) { - void deleteDB(this._cacheName); - } - } - /** - * @param {string} url - * @param {number} timestamp - * - * @private - */ - async setTimestamp(url, timestamp) { - url = normalizeURL(url); - const entry = { - url, - timestamp, - cacheName: this._cacheName, - // Creating an ID from the URL and cache name won't be necessary once - // Edge switches to Chromium and all browsers we support work with - // array keyPaths. - id: this._getId(url), - }; - const db = await this.getDb(); - const tx = db.transaction(CACHE_OBJECT_STORE, 'readwrite', { - durability: 'relaxed', - }); - await tx.store.put(entry); - await tx.done; - } - /** - * Returns the timestamp stored for a given URL. - * - * @param {string} url - * @return {number | undefined} - * - * @private - */ - async getTimestamp(url) { - const db = await this.getDb(); - const entry = await db.get(CACHE_OBJECT_STORE, this._getId(url)); - return entry === null || entry === void 0 ? void 0 : entry.timestamp; - } - /** - * Iterates through all the entries in the object store (from newest to - * oldest) and removes entries once either `maxCount` is reached or the - * entry's timestamp is less than `minTimestamp`. - * - * @param {number} minTimestamp - * @param {number} maxCount - * @return {Array} - * - * @private - */ - async expireEntries(minTimestamp, maxCount) { - const db = await this.getDb(); - let cursor = await db - .transaction(CACHE_OBJECT_STORE) - .store.index('timestamp') - .openCursor(null, 'prev'); - const entriesToDelete = []; - let entriesNotDeletedCount = 0; - while (cursor) { - const result = cursor.value; - // TODO(philipwalton): once we can use a multi-key index, we - // won't have to check `cacheName` here. - if (result.cacheName === this._cacheName) { - // Delete an entry if it's older than the max age or - // if we already have the max number allowed. - if ((minTimestamp && result.timestamp < minTimestamp) || - (maxCount && entriesNotDeletedCount >= maxCount)) { - // TODO(philipwalton): we should be able to delete the - // entry right here, but doing so causes an iteration - // bug in Safari stable (fixed in TP). Instead we can - // store the keys of the entries to delete, and then - // delete the separate transactions. - // https://github.com/GoogleChrome/workbox/issues/1978 - // cursor.delete(); - // We only need to return the URL, not the whole entry. - entriesToDelete.push(cursor.value); - } - else { - entriesNotDeletedCount++; - } - } - cursor = await cursor.continue(); - } - // TODO(philipwalton): once the Safari bug in the following issue is fixed, - // we should be able to remove this loop and do the entry deletion in the - // cursor loop above: - // https://github.com/GoogleChrome/workbox/issues/1978 - const urlsDeleted = []; - for (const entry of entriesToDelete) { - await db.delete(CACHE_OBJECT_STORE, entry.id); - urlsDeleted.push(entry.url); - } - return urlsDeleted; - } - /** - * Takes a URL and returns an ID that will be unique in the object store. - * - * @param {string} url - * @return {string} - * - * @private - */ - _getId(url) { - // Creating an ID from the URL and cache name won't be necessary once - // Edge switches to Chromium and all browsers we support work with - // array keyPaths. - return this._cacheName + '|' + normalizeURL(url); - } - /** - * Returns an open connection to the database. - * - * @private - */ - async getDb() { - if (!this._db) { - this._db = await openDB(DB_NAME, 1, { - upgrade: this._upgradeDbAndDeleteOldDbs.bind(this), - }); - } - return this._db; - } - } - - class CacheExpiration { - /** - * To construct a new CacheExpiration instance you must provide at least - * one of the `config` properties. - * - * @param {string} cacheName Name of the cache to apply restrictions to. - * @param {Object} config - * @param {number} [config.maxEntries] The maximum number of entries to cache. - * Entries used the least will be removed as the maximum is reached. - * @param {number} [config.maxAgeSeconds] The maximum age of an entry before - * it's treated as stale and removed. - * @param {Object} [config.matchOptions] The [`CacheQueryOptions`](https://developer.mozilla.org/en-US/docs/Web/API/Cache/delete#Parameters) - * that will be used when calling `delete()` on the cache. - */ - constructor(cacheName, config = {}) { - this._isRunning = false; - this._rerunRequested = false; - this._maxEntries = config.maxEntries; - this._maxAgeSeconds = config.maxAgeSeconds; - this._matchOptions = config.matchOptions; - this._cacheName = cacheName; - this._timestampModel = new CacheTimestampsModel(cacheName); - } - /** - * Expires entries for the given cache and given criteria. - */ - async expireEntries() { - if (this._isRunning) { - this._rerunRequested = true; - return; - } - this._isRunning = true; - const minTimestamp = this._maxAgeSeconds ? Date.now() - this._maxAgeSeconds * 1e3 : 0; - const urlsExpired = await this._timestampModel.expireEntries(minTimestamp, this._maxEntries); - const cache = await self.caches.open(this._cacheName); - for (const url of urlsExpired) { - await cache.delete(url, this._matchOptions); - } - this._isRunning = false; - if (this._rerunRequested) { - this._rerunRequested = false; - dontWaitFor(this.expireEntries()); - } - } - /** - * Update the timestamp for the given URL. This ensures the when - * removing entries based on maximum entries, most recently used - * is accurate or when expiring, the timestamp is up-to-date. - * - * @param {string} url - */ - async updateTimestamp(url) { - await this._timestampModel.setTimestamp(url, Date.now()); - } - /** - * Can be used to check if a URL has expired or not before it's used. - * - * This requires a look up from IndexedDB, so can be slow. - * - * Note: This method will not remove the cached entry, call - * `expireEntries()` to remove indexedDB and Cache entries. - * - * @param {string} url - * @return {boolean} - */ - async isURLExpired(url) { - if (!this._maxAgeSeconds) { - return false; - } else { - const timestamp = await this._timestampModel.getTimestamp(url); - const expireOlderThan = Date.now() - this._maxAgeSeconds * 1e3; - return timestamp !== void 0 ? timestamp < expireOlderThan : true; - } - } - /** - * Removes the IndexedDB object store used to keep track of cache expiration - * metadata. - */ - async delete() { - this._rerunRequested = false; - await this._timestampModel.expireEntries(Infinity); - } - } - - class ExpirationPlugin { - /** - * @param {ExpirationPluginOptions} config - * @param {number} [config.maxEntries] The maximum number of entries to cache. - * Entries used the least will be removed as the maximum is reached. - * @param {number} [config.maxAgeSeconds] The maximum age of an entry before - * it's treated as stale and removed. - * @param {Object} [config.matchOptions] The [`CacheQueryOptions`](https://developer.mozilla.org/en-US/docs/Web/API/Cache/delete#Parameters) - * that will be used when calling `delete()` on the cache. - * @param {boolean} [config.purgeOnQuotaError] Whether to opt this cache in to - * automatic deletion if the available storage quota has been exceeded. - */ - constructor(config = {}) { - this.cachedResponseWillBeUsed = async ({ event, request, cacheName, cachedResponse }) => { - if (!cachedResponse) { - return null; - } - const isFresh = this._isResponseDateFresh(cachedResponse); - const cacheExpiration = this._getCacheExpiration(cacheName); - dontWaitFor(cacheExpiration.expireEntries()); - const updateTimestampDone = cacheExpiration.updateTimestamp(request.url); - if (event) { - try { - event.waitUntil(updateTimestampDone); - } catch (error) { - } - } - return isFresh ? cachedResponse : null; - }; - this.cacheDidUpdate = async ({ cacheName, request }) => { - const cacheExpiration = this._getCacheExpiration(cacheName); - await cacheExpiration.updateTimestamp(request.url); - await cacheExpiration.expireEntries(); - }; - this._config = config; - this._maxAgeSeconds = config.maxAgeSeconds; - this._cacheExpirations = /* @__PURE__ */ new Map(); - if (config.purgeOnQuotaError) { - registerQuotaErrorCallback(() => this.deleteCacheAndMetadata()); - } - } - /** - * A simple helper method to return a CacheExpiration instance for a given - * cache name. - * - * @param {string} cacheName - * @return {CacheExpiration} - * - * @private - */ - _getCacheExpiration(cacheName) { - if (cacheName === cacheNames.getRuntimeName()) { - throw new WorkboxError("expire-custom-caches-only"); - } - let cacheExpiration = this._cacheExpirations.get(cacheName); - if (!cacheExpiration) { - cacheExpiration = new CacheExpiration(cacheName, this._config); - this._cacheExpirations.set(cacheName, cacheExpiration); - } - return cacheExpiration; - } - /** - * @param {Response} cachedResponse - * @return {boolean} - * - * @private - */ - _isResponseDateFresh(cachedResponse) { - if (!this._maxAgeSeconds) { - return true; - } - const dateHeaderTimestamp = this._getDateHeaderTimestamp(cachedResponse); - if (dateHeaderTimestamp === null) { - return true; - } - const now = Date.now(); - return dateHeaderTimestamp >= now - this._maxAgeSeconds * 1e3; - } - /** - * This method will extract the data header and parse it into a useful - * value. - * - * @param {Response} cachedResponse - * @return {number|null} - * - * @private - */ - _getDateHeaderTimestamp(cachedResponse) { - if (!cachedResponse.headers.has("date")) { - return null; - } - const dateHeader = cachedResponse.headers.get("date"); - const parsedDate = new Date(dateHeader); - const headerTime = parsedDate.getTime(); - if (isNaN(headerTime)) { - return null; - } - return headerTime; - } - /** - * This is a helper method that performs two operations: - * - * - Deletes *all* the underlying Cache instances associated with this plugin - * instance, by calling caches.delete() on your behalf. - * - Deletes the metadata from IndexedDB used to keep track of expiration - * details for each Cache instance. - * - * When using cache expiration, calling this method is preferable to calling - * `caches.delete()` directly, since this will ensure that the IndexedDB - * metadata is also cleanly removed and open IndexedDB instances are deleted. - * - * Note that if you're *not* using cache expiration for a given cache, calling - * `caches.delete()` and passing in the cache's name should be sufficient. - * There is no Workbox-specific method needed for cleanup in that case. - */ - async deleteCacheAndMetadata() { - for (const [cacheName, cacheExpiration] of this._cacheExpirations) { - await self.caches.delete(cacheName); - await cacheExpiration.delete(); - } - this._cacheExpirations = /* @__PURE__ */ new Map(); - } - } - - // @ts-ignore - try { - self['workbox:precaching:7.2.0'] && _(); - } - catch (e) { } - - /* - Copyright 2018 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - // Name of the search parameter used to store revision info. - const REVISION_SEARCH_PARAM = '__WB_REVISION__'; - /** - * Converts a manifest entry into a versioned URL suitable for precaching. - * - * @param {Object|string} entry - * @return {string} A URL with versioning info. - * - * @private - * @memberof workbox-precaching - */ - function createCacheKey(entry) { - if (!entry) { - throw new WorkboxError('add-to-cache-list-unexpected-type', { entry }); - } - // If a precache manifest entry is a string, it's assumed to be a versioned - // URL, like '/app.abcd1234.js'. Return as-is. - if (typeof entry === 'string') { - const urlObject = new URL(entry, location.href); - return { - cacheKey: urlObject.href, - url: urlObject.href, - }; - } - const { revision, url } = entry; - if (!url) { - throw new WorkboxError('add-to-cache-list-unexpected-type', { entry }); - } - // If there's just a URL and no revision, then it's also assumed to be a - // versioned URL. - if (!revision) { - const urlObject = new URL(url, location.href); - return { - cacheKey: urlObject.href, - url: urlObject.href, - }; - } - // Otherwise, construct a properly versioned URL using the custom Workbox - // search parameter along with the revision info. - const cacheKeyURL = new URL(url, location.href); - const originalURL = new URL(url, location.href); - cacheKeyURL.searchParams.set(REVISION_SEARCH_PARAM, revision); - return { - cacheKey: cacheKeyURL.href, - url: originalURL.href, - }; - } - - /* - Copyright 2020 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - /** - * A plugin, designed to be used with PrecacheController, to determine the - * of assets that were updated (or not updated) during the install event. - * - * @private - */ - class PrecacheInstallReportPlugin { - constructor() { - this.updatedURLs = []; - this.notUpdatedURLs = []; - this.handlerWillStart = async ({ request, state, }) => { - // TODO: `state` should never be undefined... - if (state) { - state.originalRequest = request; - } - }; - this.cachedResponseWillBeUsed = async ({ event, state, cachedResponse, }) => { - if (event.type === 'install') { - if (state && - state.originalRequest && - state.originalRequest instanceof Request) { - // TODO: `state` should never be undefined... - const url = state.originalRequest.url; - if (cachedResponse) { - this.notUpdatedURLs.push(url); - } - else { - this.updatedURLs.push(url); - } - } - } - return cachedResponse; - }; - } - } - - /* - Copyright 2020 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - /** - * A plugin, designed to be used with PrecacheController, to translate URLs into - * the corresponding cache key, based on the current revision info. - * - * @private - */ - class PrecacheCacheKeyPlugin { - constructor({ precacheController }) { - this.cacheKeyWillBeUsed = async ({ request, params, }) => { - // Params is type any, can't change right now. - /* eslint-disable */ - const cacheKey = (params === null || params === void 0 ? void 0 : params.cacheKey) || - this._precacheController.getCacheKeyForURL(request.url); - /* eslint-enable */ - return cacheKey - ? new Request(cacheKey, { headers: request.headers }) - : request; - }; - this._precacheController = precacheController; - } - } - - class PrecacheStrategy extends Strategy { - /** - * - * @param {Object} [options] - * @param {string} [options.cacheName] Cache name to store and retrieve - * requests. Defaults to the cache names provided by - * {@link workbox-core.cacheNames}. - * @param {Array} [options.plugins] {@link https://developers.google.com/web/tools/workbox/guides/using-plugins|Plugins} - * to use in conjunction with this caching strategy. - * @param {Object} [options.fetchOptions] Values passed along to the - * {@link https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters|init} - * of all fetch() requests made by this strategy. - * @param {Object} [options.matchOptions] The - * {@link https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions|CacheQueryOptions} - * for any `cache.match()` or `cache.put()` calls made by this strategy. - * @param {boolean} [options.fallbackToNetwork=true] Whether to attempt to - * get the response from the network if there's a precache miss. - */ - constructor(options = {}) { - options.cacheName = cacheNames.getPrecacheName(options.cacheName); - super(options); - this._fallbackToNetwork = options.fallbackToNetwork === false ? false : true; - this.plugins.push(PrecacheStrategy.copyRedirectedCacheableResponsesPlugin); - } - /** - * @private - * @param {Request|string} request A request to run this strategy for. - * @param {workbox-strategies.StrategyHandler} handler The event that - * triggered the request. - * @return {Promise} - */ - async _handle(request, handler) { - const response = await handler.cacheMatch(request); - if (response) { - return response; - } - if (handler.event && handler.event.type === "install") { - return await this._handleInstall(request, handler); - } - return await this._handleFetch(request, handler); - } - async _handleFetch(request, handler) { - let response; - const params = handler.params || {}; - if (this._fallbackToNetwork) { - const integrityInManifest = params.integrity; - const integrityInRequest = request.integrity; - const noIntegrityConflict = !integrityInRequest || integrityInRequest === integrityInManifest; - response = await handler.fetch(new Request(request, { - integrity: request.mode !== "no-cors" ? integrityInRequest || integrityInManifest : void 0 - })); - if (integrityInManifest && noIntegrityConflict && request.mode !== "no-cors") { - this._useDefaultCacheabilityPluginIfNeeded(); - await handler.cachePut(request, response.clone()); - } - } else { - throw new WorkboxError("missing-precache-entry", { - cacheName: this.cacheName, - url: request.url - }); - } - return response; - } - async _handleInstall(request, handler) { - this._useDefaultCacheabilityPluginIfNeeded(); - const response = await handler.fetch(request); - const wasCached = await handler.cachePut(request, response.clone()); - if (!wasCached) { - throw new WorkboxError("bad-precaching-response", { - url: request.url, - status: response.status - }); - } - return response; - } - /** - * This method is complex, as there a number of things to account for: - * - * The `plugins` array can be set at construction, and/or it might be added to - * to at any time before the strategy is used. - * - * At the time the strategy is used (i.e. during an `install` event), there - * needs to be at least one plugin that implements `cacheWillUpdate` in the - * array, other than `copyRedirectedCacheableResponsesPlugin`. - * - * - If this method is called and there are no suitable `cacheWillUpdate` - * plugins, we need to add `defaultPrecacheCacheabilityPlugin`. - * - * - If this method is called and there is exactly one `cacheWillUpdate`, then - * we don't have to do anything (this might be a previously added - * `defaultPrecacheCacheabilityPlugin`, or it might be a custom plugin). - * - * - If this method is called and there is more than one `cacheWillUpdate`, - * then we need to check if one is `defaultPrecacheCacheabilityPlugin`. If so, - * we need to remove it. (This situation is unlikely, but it could happen if - * the strategy is used multiple times, the first without a `cacheWillUpdate`, - * and then later on after manually adding a custom `cacheWillUpdate`.) - * - * See https://github.com/GoogleChrome/workbox/issues/2737 for more context. - * - * @private - */ - _useDefaultCacheabilityPluginIfNeeded() { - let defaultPluginIndex = null; - let cacheWillUpdatePluginCount = 0; - for (const [index, plugin] of this.plugins.entries()) { - if (plugin === PrecacheStrategy.copyRedirectedCacheableResponsesPlugin) { - continue; - } - if (plugin === PrecacheStrategy.defaultPrecacheCacheabilityPlugin) { - defaultPluginIndex = index; - } - if (plugin.cacheWillUpdate) { - cacheWillUpdatePluginCount++; - } - } - if (cacheWillUpdatePluginCount === 0) { - this.plugins.push(PrecacheStrategy.defaultPrecacheCacheabilityPlugin); - } else if (cacheWillUpdatePluginCount > 1 && defaultPluginIndex !== null) { - this.plugins.splice(defaultPluginIndex, 1); - } - } - } - PrecacheStrategy.defaultPrecacheCacheabilityPlugin = { - async cacheWillUpdate({ response }) { - if (!response || response.status >= 400) { - return null; - } - return response; - } - }; - PrecacheStrategy.copyRedirectedCacheableResponsesPlugin = { - async cacheWillUpdate({ response }) { - return response.redirected ? await copyResponse(response) : response; - } - }; - - class PrecacheController { - /** - * Create a new PrecacheController. - * - * @param {Object} [options] - * @param {string} [options.cacheName] The cache to use for precaching. - * @param {string} [options.plugins] Plugins to use when precaching as well - * as responding to fetch events for precached assets. - * @param {boolean} [options.fallbackToNetwork=true] Whether to attempt to - * get the response from the network if there's a precache miss. - */ - constructor({ cacheName, plugins = [], fallbackToNetwork = true } = {}) { - this._urlsToCacheKeys = /* @__PURE__ */ new Map(); - this._urlsToCacheModes = /* @__PURE__ */ new Map(); - this._cacheKeysToIntegrities = /* @__PURE__ */ new Map(); - this._strategy = new PrecacheStrategy({ - cacheName: cacheNames.getPrecacheName(cacheName), - plugins: [ - ...plugins, - new PrecacheCacheKeyPlugin({ precacheController: this }) - ], - fallbackToNetwork - }); - this.install = this.install.bind(this); - this.activate = this.activate.bind(this); - } - /** - * @type {workbox-precaching.PrecacheStrategy} The strategy created by this controller and - * used to cache assets and respond to fetch events. - */ - get strategy() { - return this._strategy; - } - /** - * Adds items to the precache list, removing any duplicates and - * stores the files in the - * {@link workbox-core.cacheNames|"precache cache"} when the service - * worker installs. - * - * This method can be called multiple times. - * - * @param {Array} [entries=[]] Array of entries to precache. - */ - precache(entries) { - this.addToCacheList(entries); - if (!this._installAndActiveListenersAdded) { - self.addEventListener("install", this.install); - self.addEventListener("activate", this.activate); - this._installAndActiveListenersAdded = true; - } - } - /** - * This method will add items to the precache list, removing duplicates - * and ensuring the information is valid. - * - * @param {Array} entries - * Array of entries to precache. - */ - addToCacheList(entries) { - const urlsToWarnAbout = []; - for (const entry of entries) { - if (typeof entry === "string") { - urlsToWarnAbout.push(entry); - } else if (entry && entry.revision === void 0) { - urlsToWarnAbout.push(entry.url); - } - const { cacheKey, url } = createCacheKey(entry); - const cacheMode = typeof entry !== "string" && entry.revision ? "reload" : "default"; - if (this._urlsToCacheKeys.has(url) && this._urlsToCacheKeys.get(url) !== cacheKey) { - throw new WorkboxError("add-to-cache-list-conflicting-entries", { - firstEntry: this._urlsToCacheKeys.get(url), - secondEntry: cacheKey - }); - } - if (typeof entry !== "string" && entry.integrity) { - if (this._cacheKeysToIntegrities.has(cacheKey) && this._cacheKeysToIntegrities.get(cacheKey) !== entry.integrity) { - throw new WorkboxError("add-to-cache-list-conflicting-integrities", { - url - }); - } - this._cacheKeysToIntegrities.set(cacheKey, entry.integrity); - } - this._urlsToCacheKeys.set(url, cacheKey); - this._urlsToCacheModes.set(url, cacheMode); - if (urlsToWarnAbout.length > 0) { - const warningMessage = `Workbox is precaching URLs without revision info: ${urlsToWarnAbout.join(", ")} -This is generally NOT safe. Learn more at https://bit.ly/wb-precache`; - { - console.warn(warningMessage); - } - } - } - } - /** - * Precaches new and updated assets. Call this method from the service worker - * install event. - * - * Note: this method calls `event.waitUntil()` for you, so you do not need - * to call it yourself in your event handlers. - * - * @param {ExtendableEvent} event - * @return {Promise} - */ - install(event) { - return waitUntil(event, async () => { - const installReportPlugin = new PrecacheInstallReportPlugin(); - this.strategy.plugins.push(installReportPlugin); - for (const [url, cacheKey] of this._urlsToCacheKeys) { - const integrity = this._cacheKeysToIntegrities.get(cacheKey); - const cacheMode = this._urlsToCacheModes.get(url); - const request = new Request(url, { - integrity, - cache: cacheMode, - credentials: "same-origin" - }); - await Promise.all(this.strategy.handleAll({ - params: { cacheKey }, - request, - event - })); - } - const { updatedURLs, notUpdatedURLs } = installReportPlugin; - return { updatedURLs, notUpdatedURLs }; - }); - } - /** - * Deletes assets that are no longer present in the current precache manifest. - * Call this method from the service worker activate event. - * - * Note: this method calls `event.waitUntil()` for you, so you do not need - * to call it yourself in your event handlers. - * - * @param {ExtendableEvent} event - * @return {Promise} - */ - activate(event) { - return waitUntil(event, async () => { - const cache = await self.caches.open(this.strategy.cacheName); - const currentlyCachedRequests = await cache.keys(); - const expectedCacheKeys = new Set(this._urlsToCacheKeys.values()); - const deletedURLs = []; - for (const request of currentlyCachedRequests) { - if (!expectedCacheKeys.has(request.url)) { - await cache.delete(request); - deletedURLs.push(request.url); - } - } - return { deletedURLs }; - }); - } - /** - * Returns a mapping of a precached URL to the corresponding cache key, taking - * into account the revision information for the URL. - * - * @return {Map} A URL to cache key mapping. - */ - getURLsToCacheKeys() { - return this._urlsToCacheKeys; - } - /** - * Returns a list of all the URLs that have been precached by the current - * service worker. - * - * @return {Array} The precached URLs. - */ - getCachedURLs() { - return [...this._urlsToCacheKeys.keys()]; - } - /** - * Returns the cache key used for storing a given URL. If that URL is - * unversioned, like `/index.html', then the cache key will be the original - * URL with a search parameter appended to it. - * - * @param {string} url A URL whose cache key you want to look up. - * @return {string} The versioned URL that corresponds to a cache key - * for the original URL, or undefined if that URL isn't precached. - */ - getCacheKeyForURL(url) { - const urlObject = new URL(url, location.href); - return this._urlsToCacheKeys.get(urlObject.href); - } - /** - * @param {string} url A cache key whose SRI you want to look up. - * @return {string} The subresource integrity associated with the cache key, - * or undefined if it's not set. - */ - getIntegrityForCacheKey(cacheKey) { - return this._cacheKeysToIntegrities.get(cacheKey); - } - /** - * This acts as a drop-in replacement for - * [`cache.match()`](https://developer.mozilla.org/en-US/docs/Web/API/Cache/match) - * with the following differences: - * - * - It knows what the name of the precache is, and only checks in that cache. - * - It allows you to pass in an "original" URL without versioning parameters, - * and it will automatically look up the correct cache key for the currently - * active revision of that URL. - * - * E.g., `matchPrecache('index.html')` will find the correct precached - * response for the currently active service worker, even if the actual cache - * key is `'/index.html?__WB_REVISION__=1234abcd'`. - * - * @param {string|Request} request The key (without revisioning parameters) - * to look up in the precache. - * @return {Promise} - */ - async matchPrecache(request) { - const url = request instanceof Request ? request.url : request; - const cacheKey = this.getCacheKeyForURL(url); - if (cacheKey) { - const cache = await self.caches.open(this.strategy.cacheName); - return cache.match(cacheKey); - } - return void 0; - } - /** - * Returns a function that looks up `url` in the precache (taking into - * account revision information), and returns the corresponding `Response`. - * - * @param {string} url The precached URL which will be used to lookup the - * `Response`. - * @return {workbox-routing~handlerCallback} - */ - createHandlerBoundToURL(url) { - const cacheKey = this.getCacheKeyForURL(url); - if (!cacheKey) { - throw new WorkboxError("non-precached-url", { url }); - } - return (options) => { - options.request = new Request(url); - options.params = Object.assign({ cacheKey }, options.params); - return this.strategy.handle(options); - }; - } - } - - /* - Copyright 2019 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - let precacheController; - /** - * @return {PrecacheController} - * @private - */ - const getOrCreatePrecacheController = () => { - if (!precacheController) { - precacheController = new PrecacheController(); - } - return precacheController; - }; - - /* - Copyright 2018 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - /** - * Removes any URL search parameters that should be ignored. - * - * @param {URL} urlObject The original URL. - * @param {Array} ignoreURLParametersMatching RegExps to test against - * each search parameter name. Matches mean that the search parameter should be - * ignored. - * @return {URL} The URL with any ignored search parameters removed. - * - * @private - * @memberof workbox-precaching - */ - function removeIgnoredSearchParams(urlObject, ignoreURLParametersMatching = []) { - // Convert the iterable into an array at the start of the loop to make sure - // deletion doesn't mess up iteration. - for (const paramName of [...urlObject.searchParams.keys()]) { - if (ignoreURLParametersMatching.some((regExp) => regExp.test(paramName))) { - urlObject.searchParams.delete(paramName); - } - } - return urlObject; - } - - /* - Copyright 2019 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - /** - * Generator function that yields possible variations on the original URL to - * check, one at a time. - * - * @param {string} url - * @param {Object} options - * - * @private - * @memberof workbox-precaching - */ - function* generateURLVariations(url, { ignoreURLParametersMatching = [/^utm_/, /^fbclid$/], directoryIndex = 'index.html', cleanURLs = true, urlManipulation, } = {}) { - const urlObject = new URL(url, location.href); - urlObject.hash = ''; - yield urlObject.href; - const urlWithoutIgnoredParams = removeIgnoredSearchParams(urlObject, ignoreURLParametersMatching); - yield urlWithoutIgnoredParams.href; - if (directoryIndex && urlWithoutIgnoredParams.pathname.endsWith('/')) { - const directoryURL = new URL(urlWithoutIgnoredParams.href); - directoryURL.pathname += directoryIndex; - yield directoryURL.href; - } - if (cleanURLs) { - const cleanURL = new URL(urlWithoutIgnoredParams.href); - cleanURL.pathname += '.html'; - yield cleanURL.href; - } - if (urlManipulation) { - const additionalURLs = urlManipulation({ url: urlObject }); - for (const urlToAttempt of additionalURLs) { - yield urlToAttempt.href; - } - } - } - - class PrecacheRoute extends Route { - /** - * @param {PrecacheController} precacheController A `PrecacheController` - * instance used to both match requests and respond to fetch events. - * @param {Object} [options] Options to control how requests are matched - * against the list of precached URLs. - * @param {string} [options.directoryIndex=index.html] The `directoryIndex` will - * check cache entries for a URLs ending with '/' to see if there is a hit when - * appending the `directoryIndex` value. - * @param {Array} [options.ignoreURLParametersMatching=[/^utm_/, /^fbclid$/]] An - * array of regex's to remove search params when looking for a cache match. - * @param {boolean} [options.cleanURLs=true] The `cleanURLs` option will - * check the cache for the URL with a `.html` added to the end of the end. - * @param {workbox-precaching~urlManipulation} [options.urlManipulation] - * This is a function that should take a URL and return an array of - * alternative URLs that should be checked for precache matches. - */ - constructor(precacheController, options) { - const match = ({ request }) => { - const urlsToCacheKeys = precacheController.getURLsToCacheKeys(); - for (const possibleURL of generateURLVariations(request.url, options)) { - const cacheKey = urlsToCacheKeys.get(possibleURL); - if (cacheKey) { - const integrity = precacheController.getIntegrityForCacheKey(cacheKey); - return { cacheKey, integrity }; - } - } - return; - }; - super(match, precacheController.strategy); - } - } - - /* - Copyright 2019 Google LLC - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - /** - * Add a `fetch` listener to the service worker that will - * respond to - * [network requests]{@link https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers#Custom_responses_to_requests} - * with precached assets. - * - * Requests for assets that aren't precached, the `FetchEvent` will not be - * responded to, allowing the event to fall through to other `fetch` event - * listeners. - * - * @param {Object} [options] See the {@link workbox-precaching.PrecacheRoute} - * options. - * - * @memberof workbox-precaching - */ - function addRoute(options) { - const precacheController = getOrCreatePrecacheController(); - const precacheRoute = new PrecacheRoute(precacheController, options); - registerRoute(precacheRoute); - } - - /* - Copyright 2019 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - /** - * Adds items to the precache list, removing any duplicates and - * stores the files in the - * {@link workbox-core.cacheNames|"precache cache"} when the service - * worker installs. - * - * This method can be called multiple times. - * - * Please note: This method **will not** serve any of the cached files for you. - * It only precaches files. To respond to a network request you call - * {@link workbox-precaching.addRoute}. - * - * If you have a single array of files to precache, you can just call - * {@link workbox-precaching.precacheAndRoute}. - * - * @param {Array} [entries=[]] Array of entries to precache. - * - * @memberof workbox-precaching - */ - function precache(entries) { - const precacheController = getOrCreatePrecacheController(); - precacheController.precache(entries); - } - - /* - Copyright 2019 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - /** - * This method will add entries to the precache list and add a route to - * respond to fetch events. - * - * This is a convenience method that will call - * {@link workbox-precaching.precache} and - * {@link workbox-precaching.addRoute} in a single call. - * - * @param {Array} entries Array of entries to precache. - * @param {Object} [options] See the - * {@link workbox-precaching.PrecacheRoute} options. - * - * @memberof workbox-precaching - */ - function precacheAndRoute(entries, options) { - precache(entries); - addRoute(options); - } - - const CONFIG = { - TIMEZONE: "Europe/Vienna", - SEASON: (/* @__PURE__ */ new Date()).getFullYear(), - API_BASE: "https://api.hardbulls.com/", - BULLS_LEAGUES: ["bbl"], - ASSET_JSON_CACHE_TTL: 60 * 60, - // 1h - ASSET_IMAGE_CACHE_TTL: 60 * 60 * 24 - // 1d - }; - - self.__WB_DISABLE_DEV_LOGS = true; - self.addEventListener("install", async (_) => { - await self.skipWaiting(); - }); - clientsClaim(); - precacheAndRoute([{"revision":"411cac03fe7d8ae74873d9cf5ec42755","url":"_dummy.EMaMnWE_.js"},{"revision":"8a95426001e2ab52905d353e1cb07ec7","url":"assets/config-Bk6KWWaJ.js"},{"revision":"32f094cddb03a6a63379e605800a36c6","url":"favicon.ico"},{"revision":"0de804844936ad8a5b09a62825d81e5c","url":"icon-192x192.png"},{"revision":"c4aab75a66e536fbc3bc71eaa918b919","url":"icon-512x512.png"},{"revision":"62290b252e06e8e69e038cef1e46364f","url":"icon.svg"},{"revision":"459c024ec54fcd6e6dd6352164f3874a","url":"icons/baseball-helmet.svg"},{"revision":"ed102eaef5e3f23a0bf5a2ba658cae5f","url":"icons/baseball.svg"},{"revision":"78cc32f1b1611d9880bef2fef0708ebf","url":"icons/calendar-dots.svg"},{"revision":"c18781107d773375d30063731b8c4eab","url":"icons/dots-three-circle.svg"},{"revision":"ac7da8ce255583a24fd32c3f4c6fa655","url":"icons/download.svg"},{"revision":"b77014424f62dedc9b471b489a67897c","url":"icons/house-line.svg"},{"revision":"f9ee48fbe9771975ed99e94ca1675b9c","url":"images/background_landscape.webp"},{"revision":"e757cc99b4f210e1985bc58d051cab97","url":"images/background_portrait.webp"},{"revision":"2e541b5555e62153d5b18ade47c995ba","url":"index.html"},{"revision":"653637a4f1b7a49ac038af4c026f4351","url":"logos/bull.svg"},{"revision":"c03d47b23901a7715c07531772156036","url":"logos/bulls_mlb.svg"},{"revision":"ff6fc0bbd39075b09d61ff5240cf1bc3","url":"logos/hb.svg"},{"revision":"29eb95ca7efe137df808e6da2a0b4c34","url":"main.DUuuPnxD.js"},{"revision":"86f930f916b73981e8a03ad811e1c727","url":"manifest.json"}]); - registerRoute( - new RegExp(`^${escapeRegExp(CONFIG.API_BASE)}api/.*\\.json$`), - new StaleWhileRevalidate({ - cacheName: "api-json-cache", - plugins: [ - new ExpirationPlugin({ - purgeOnQuotaError: true, - maxAgeSeconds: CONFIG.ASSET_JSON_CACHE_TTL - }) - ] - }) - ); - registerRoute( - new RegExp(`^${escapeRegExp(CONFIG.API_BASE)}assets/.*\\.(?:png|jpg|jpeg|svg|webp)$`), - new CacheFirst({ - cacheName: "api-assets-cache-v1", - plugins: [ - new ExpirationPlugin({ - maxAgeSeconds: CONFIG.ASSET_IMAGE_CACHE_TTL, - purgeOnQuotaError: true - }) - ] - }) - ); - -})(); -//# sourceMappingURL=_service-worker.js.map +(function(){"use strict";try{self["workbox:core:7.2.0"]&&_()}catch{}const We=null,z=(s,...e)=>{let t=s;return e.length>0&&(t+=` :: ${JSON.stringify(e)}`),t};class l extends Error{constructor(e,t){const n=z(e,t);super(n),this.name=e,this.details=t}}const N=new Set;function Y(s){N.add(s)}const d={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:typeof registration<"u"?registration.scope:""},L=s=>[d.prefix,s,d.suffix].filter(e=>e&&e.length>0).join("-"),Z=s=>{for(const e of Object.keys(d))s(e)},b={updateDetails:s=>{Z(e=>{typeof s[e]=="string"&&(d[e]=s[e])})},getGoogleAnalyticsName:s=>s||L(d.googleAnalytics),getPrecacheName:s=>s||L(d.precache),getPrefix:()=>d.prefix,getRuntimeName:s=>s||L(d.runtime),getSuffix:()=>d.suffix};function v(s,e){const t=new URL(s);for(const n of e)t.searchParams.delete(n);return t.href}async function X(s,e,t,n){const a=v(e.url,t);if(e.url===a)return s.match(e,n);const r=Object.assign(Object.assign({},n),{ignoreSearch:!0}),i=await s.keys(e,r);for(const c of i){const o=v(c.url,t);if(a===o)return s.match(c,n)}}let g;function ee(){if(g===void 0){const s=new Response("");if("body"in s)try{new Response(s.body),g=!0}catch{g=!1}g=!1}return g}function O(s){s.then(()=>{})}class te{constructor(){this.promise=new Promise((e,t)=>{this.resolve=e,this.reject=t})}}async function se(){for(const s of N)await s()}const ne=s=>new URL(String(s),location.href).href.replace(new RegExp(`^${location.origin}`),"");function ae(s){return new Promise(e=>setTimeout(e,s))}function K(s,e){const t=e();return s.waitUntil(t),t}async function re(s,e){let t=null;if(s.url&&(t=new URL(s.url).origin),t!==self.location.origin)throw new l("cross-origin-copy-response",{origin:t});const n=s.clone(),r={headers:new Headers(n.headers),status:n.status,statusText:n.statusText},i=ee()?n.body:await n.blob();return new Response(i,r)}function ie(){self.addEventListener("activate",()=>self.clients.claim())}try{self["workbox:routing:7.2.0"]&&_()}catch{}const B="GET",C=s=>s&&typeof s=="object"?s:{handle:s};class m{constructor(e,t,n=B){this.handler=C(t),this.match=e,this.method=n}setCatchHandler(e){this.catchHandler=C(e)}}class ce extends m{constructor(e,t,n){const a=({url:r})=>{const i=e.exec(r.href);if(i&&!(r.origin!==location.origin&&i.index!==0))return i.slice(1)};super(a,t,n)}}class oe{constructor(){this._routes=new Map,this._defaultHandlerMap=new Map}get routes(){return this._routes}addFetchListener(){self.addEventListener("fetch",e=>{const{request:t}=e,n=this.handleRequest({request:t,event:e});n&&e.respondWith(n)})}addCacheListener(){self.addEventListener("message",e=>{if(e.data&&e.data.type==="CACHE_URLS"){const{payload:t}=e.data,n=Promise.all(t.urlsToCache.map(a=>{typeof a=="string"&&(a=[a]);const r=new Request(...a);return this.handleRequest({request:r,event:e})}));e.waitUntil(n),e.ports&&e.ports[0]&&n.then(()=>e.ports[0].postMessage(!0))}})}handleRequest({request:e,event:t}){const n=new URL(e.url,location.href);if(!n.protocol.startsWith("http"))return;const a=n.origin===location.origin,{params:r,route:i}=this.findMatchingRoute({event:t,request:e,sameOrigin:a,url:n});let c=i&&i.handler;const o=e.method;if(!c&&this._defaultHandlerMap.has(o)&&(c=this._defaultHandlerMap.get(o)),!c)return;let h;try{h=c.handle({url:n,request:e,event:t,params:r})}catch(u){h=Promise.reject(u)}const R=i&&i.catchHandler;return h instanceof Promise&&(this._catchHandler||R)&&(h=h.catch(async u=>{if(R)try{return await R.handle({url:n,request:e,event:t,params:r})}catch(J){J instanceof Error&&(u=J)}if(this._catchHandler)return this._catchHandler.handle({url:n,request:e,event:t});throw u})),h}findMatchingRoute({url:e,sameOrigin:t,request:n,event:a}){const r=this._routes.get(n.method)||[];for(const i of r){let c;const o=i.match({url:e,sameOrigin:t,request:n,event:a});if(o)return c=o,(Array.isArray(c)&&c.length===0||o.constructor===Object&&Object.keys(o).length===0||typeof o=="boolean")&&(c=void 0),{route:i,params:c}}return{}}setDefaultHandler(e,t=B){this._defaultHandlerMap.set(t,C(e))}setCatchHandler(e){this._catchHandler=C(e)}registerRoute(e){this._routes.has(e.method)||this._routes.set(e.method,[]),this._routes.get(e.method).push(e)}unregisterRoute(e){if(!this._routes.has(e.method))throw new l("unregister-route-but-not-found-with-method",{method:e.method});const t=this._routes.get(e.method).indexOf(e);if(t>-1)this._routes.get(e.method).splice(t,1);else throw new l("unregister-route-route-not-registered")}}let w;const he=()=>(w||(w=new oe,w.addFetchListener(),w.addCacheListener()),w);function D(s,e,t){let n;if(typeof s=="string"){const r=new URL(s,location.href),i=({url:c})=>c.href===r.href;n=new m(i,e,t)}else if(s instanceof RegExp)n=new ce(s,e,t);else if(typeof s=="function")n=new m(s,e,t);else if(s instanceof m)n=s;else throw new l("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});return he().registerRoute(n),n}try{self["workbox:strategies:7.2.0"]&&_()}catch{}function E(s){return typeof s=="string"?new Request(s):s}class le{constructor(e,t){this._cacheKeys={},Object.assign(this,t),this.event=t.event,this._strategy=e,this._handlerDeferred=new te,this._extendLifetimePromises=[],this._plugins=[...e.plugins],this._pluginStateMap=new Map;for(const n of this._plugins)this._pluginStateMap.set(n,{});this.event.waitUntil(this._handlerDeferred.promise)}async fetch(e){const{event:t}=this;let n=E(e);if(n.mode==="navigate"&&t instanceof FetchEvent&&t.preloadResponse){const i=await t.preloadResponse;if(i)return i}const a=this.hasCallback("fetchDidFail")?n.clone():null;try{for(const i of this.iterateCallbacks("requestWillFetch"))n=await i({request:n.clone(),event:t})}catch(i){if(i instanceof Error)throw new l("plugin-error-request-will-fetch",{thrownErrorMessage:i.message})}const r=n.clone();try{let i;i=await fetch(n,n.mode==="navigate"?void 0:this._strategy.fetchOptions);for(const c of this.iterateCallbacks("fetchDidSucceed"))i=await c({event:t,request:r,response:i});return i}catch(i){throw a&&await this.runCallbacks("fetchDidFail",{error:i,event:t,originalRequest:a.clone(),request:r.clone()}),i}}async fetchAndCachePut(e){const t=await this.fetch(e),n=t.clone();return this.waitUntil(this.cachePut(e,n)),t}async cacheMatch(e){const t=E(e);let n;const{cacheName:a,matchOptions:r}=this._strategy,i=await this.getCacheKey(t,"read"),c=Object.assign(Object.assign({},r),{cacheName:a});n=await caches.match(i,c);for(const o of this.iterateCallbacks("cachedResponseWillBeUsed"))n=await o({cacheName:a,matchOptions:r,cachedResponse:n,request:i,event:this.event})||void 0;return n}async cachePut(e,t){const n=E(e);await ae(0);const a=await this.getCacheKey(n,"write");if(!t)throw new l("cache-put-with-no-response",{url:ne(a.url)});const r=await this._ensureResponseSafeToCache(t);if(!r)return!1;const{cacheName:i,matchOptions:c}=this._strategy,o=await self.caches.open(i),h=this.hasCallback("cacheDidUpdate"),R=h?await X(o,a.clone(),["__WB_REVISION__"],c):null;try{await o.put(a,h?r.clone():r)}catch(u){if(u instanceof Error)throw u.name==="QuotaExceededError"&&await se(),u}for(const u of this.iterateCallbacks("cacheDidUpdate"))await u({cacheName:i,oldResponse:R,newResponse:r.clone(),request:a,event:this.event});return!0}async getCacheKey(e,t){const n=`${e.url} | ${t}`;if(!this._cacheKeys[n]){let a=e;for(const r of this.iterateCallbacks("cacheKeyWillBeUsed"))a=E(await r({mode:t,request:a,event:this.event,params:this.params}));this._cacheKeys[n]=a}return this._cacheKeys[n]}hasCallback(e){for(const t of this._strategy.plugins)if(e in t)return!0;return!1}async runCallbacks(e,t){for(const n of this.iterateCallbacks(e))await n(t)}*iterateCallbacks(e){for(const t of this._strategy.plugins)if(typeof t[e]=="function"){const n=this._pluginStateMap.get(t);yield r=>{const i=Object.assign(Object.assign({},r),{state:n});return t[e](i)}}}waitUntil(e){return this._extendLifetimePromises.push(e),e}async doneWaiting(){let e;for(;e=this._extendLifetimePromises.shift();)await e}destroy(){this._handlerDeferred.resolve(null)}async _ensureResponseSafeToCache(e){let t=e,n=!1;for(const a of this.iterateCallbacks("cacheWillUpdate"))if(t=await a({request:this.request,response:t,event:this.event})||void 0,n=!0,!t)break;return n||t&&t.status!==200&&(t=void 0),t}}class T{constructor(e={}){this.cacheName=b.getRuntimeName(e.cacheName),this.plugins=e.plugins||[],this.fetchOptions=e.fetchOptions,this.matchOptions=e.matchOptions}handle(e){const[t]=this.handleAll(e);return t}handleAll(e){e instanceof FetchEvent&&(e={event:e,request:e.request});const t=e.event,n=typeof e.request=="string"?new Request(e.request):e.request,a="params"in e?e.params:void 0,r=new le(this,{event:t,request:n,params:a}),i=this._getResponse(r,n,t),c=this._awaitComplete(i,r,n,t);return[i,c]}async _getResponse(e,t,n){await e.runCallbacks("handlerWillStart",{event:n,request:t});let a;try{if(a=await this._handle(t,e),!a||a.type==="error")throw new l("no-response",{url:t.url})}catch(r){if(r instanceof Error){for(const i of e.iterateCallbacks("handlerDidError"))if(a=await i({error:r,event:n,request:t}),a)break}if(!a)throw r}for(const r of e.iterateCallbacks("handlerWillRespond"))a=await r({event:n,request:t,response:a});return a}async _awaitComplete(e,t,n,a){let r,i;try{r=await e}catch{}try{await t.runCallbacks("handlerDidRespond",{event:a,request:n,response:r}),await t.doneWaiting()}catch(c){c instanceof Error&&(i=c)}if(await t.runCallbacks("handlerDidComplete",{event:a,request:n,response:r,error:i}),t.destroy(),i)throw i}}class ue extends T{async _handle(e,t){let n=await t.cacheMatch(e),a;if(!n)try{n=await t.fetchAndCachePut(e)}catch(r){r instanceof Error&&(a=r)}if(!n)throw new l("no-response",{url:e.url,error:a});return n}}const de={cacheWillUpdate:async({response:s})=>s.status===200||s.status===0?s:null};class fe extends T{constructor(e={}){super(e),this.plugins.some(t=>"cacheWillUpdate"in t)||this.plugins.unshift(de)}async _handle(e,t){const n=t.fetchAndCachePut(e).catch(()=>{});t.waitUntil(n);let a=await t.cacheMatch(e),r;if(!a)try{a=await n}catch(i){i instanceof Error&&(r=i)}if(!a)throw new l("no-response",{url:e.url,error:r});return a}}function W(s){return s.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}const pe=(s,e)=>e.some(t=>s instanceof t);let j,F;function ge(){return j||(j=[IDBDatabase,IDBObjectStore,IDBIndex,IDBCursor,IDBTransaction])}function me(){return F||(F=[IDBCursor.prototype.advance,IDBCursor.prototype.continue,IDBCursor.prototype.continuePrimaryKey])}const H=new WeakMap,U=new WeakMap,q=new WeakMap,A=new WeakMap,P=new WeakMap;function we(s){const e=new Promise((t,n)=>{const a=()=>{s.removeEventListener("success",r),s.removeEventListener("error",i)},r=()=>{t(f(s.result)),a()},i=()=>{n(s.error),a()};s.addEventListener("success",r),s.addEventListener("error",i)});return e.then(t=>{t instanceof IDBCursor&&H.set(t,s)}).catch(()=>{}),P.set(e,s),e}function ye(s){if(U.has(s))return;const e=new Promise((t,n)=>{const a=()=>{s.removeEventListener("complete",r),s.removeEventListener("error",i),s.removeEventListener("abort",i)},r=()=>{t(),a()},i=()=>{n(s.error||new DOMException("AbortError","AbortError")),a()};s.addEventListener("complete",r),s.addEventListener("error",i),s.addEventListener("abort",i)});U.set(s,e)}let k={get(s,e,t){if(s instanceof IDBTransaction){if(e==="done")return U.get(s);if(e==="objectStoreNames")return s.objectStoreNames||q.get(s);if(e==="store")return t.objectStoreNames[1]?void 0:t.objectStore(t.objectStoreNames[0])}return f(s[e])},set(s,e,t){return s[e]=t,!0},has(s,e){return s instanceof IDBTransaction&&(e==="done"||e==="store")?!0:e in s}};function _e(s){k=s(k)}function Re(s){return s===IDBDatabase.prototype.transaction&&!("objectStoreNames"in IDBTransaction.prototype)?function(e,...t){const n=s.call(I(this),e,...t);return q.set(n,e.sort?e.sort():[e]),f(n)}:me().includes(s)?function(...e){return s.apply(I(this),e),f(H.get(this))}:function(...e){return f(s.apply(I(this),e))}}function be(s){return typeof s=="function"?Re(s):(s instanceof IDBTransaction&&ye(s),pe(s,ge())?new Proxy(s,k):s)}function f(s){if(s instanceof IDBRequest)return we(s);if(A.has(s))return A.get(s);const e=be(s);return e!==s&&(A.set(s,e),P.set(e,s)),e}const I=s=>P.get(s);function Ce(s,e,{blocked:t,upgrade:n,blocking:a,terminated:r}={}){const i=indexedDB.open(s,e),c=f(i);return n&&i.addEventListener("upgradeneeded",o=>{n(f(i.result),o.oldVersion,o.newVersion,f(i.transaction),o)}),t&&i.addEventListener("blocked",o=>t(o.oldVersion,o.newVersion,o)),c.then(o=>{r&&o.addEventListener("close",()=>r()),a&&o.addEventListener("versionchange",h=>a(h.oldVersion,h.newVersion,h))}).catch(()=>{}),c}function Ee(s,{blocked:e}={}){const t=indexedDB.deleteDatabase(s);return e&&t.addEventListener("blocked",n=>e(n.oldVersion,n)),f(t).then(()=>{})}const xe=["get","getKey","getAll","getAllKeys","count"],Le=["put","add","delete","clear"],S=new Map;function V(s,e){if(!(s instanceof IDBDatabase&&!(e in s)&&typeof e=="string"))return;if(S.get(e))return S.get(e);const t=e.replace(/FromIndex$/,""),n=e!==t,a=Le.includes(t);if(!(t in(n?IDBIndex:IDBObjectStore).prototype)||!(a||xe.includes(t)))return;const r=async function(i,...c){const o=this.transaction(i,a?"readwrite":"readonly");let h=o.store;return n&&(h=h.index(c.shift())),(await Promise.all([h[t](...c),a&&o.done]))[0]};return S.set(e,r),r}_e(s=>({...s,get:(e,t,n)=>V(e,t)||s.get(e,t,n),has:(e,t)=>!!V(e,t)||s.has(e,t)}));try{self["workbox:expiration:7.2.0"]&&_()}catch{}const De="workbox-expiration",y="cache-entries",$=s=>{const e=new URL(s,location.href);return e.hash="",e.href};class Te{constructor(e){this._db=null,this._cacheName=e}_upgradeDb(e){const t=e.createObjectStore(y,{keyPath:"id"});t.createIndex("cacheName","cacheName",{unique:!1}),t.createIndex("timestamp","timestamp",{unique:!1})}_upgradeDbAndDeleteOldDbs(e){this._upgradeDb(e),this._cacheName&&Ee(this._cacheName)}async setTimestamp(e,t){e=$(e);const n={url:e,timestamp:t,cacheName:this._cacheName,id:this._getId(e)},r=(await this.getDb()).transaction(y,"readwrite",{durability:"relaxed"});await r.store.put(n),await r.done}async getTimestamp(e){const n=await(await this.getDb()).get(y,this._getId(e));return n?.timestamp}async expireEntries(e,t){const n=await this.getDb();let a=await n.transaction(y).store.index("timestamp").openCursor(null,"prev");const r=[];let i=0;for(;a;){const o=a.value;o.cacheName===this._cacheName&&(e&&o.timestamp=t?r.push(a.value):i++),a=await a.continue()}const c=[];for(const o of r)await n.delete(y,o.id),c.push(o.url);return c}_getId(e){return this._cacheName+"|"+$(e)}async getDb(){return this._db||(this._db=await Ce(De,1,{upgrade:this._upgradeDbAndDeleteOldDbs.bind(this)})),this._db}}class Ue{constructor(e,t={}){this._isRunning=!1,this._rerunRequested=!1,this._maxEntries=t.maxEntries,this._maxAgeSeconds=t.maxAgeSeconds,this._matchOptions=t.matchOptions,this._cacheName=e,this._timestampModel=new Te(e)}async expireEntries(){if(this._isRunning){this._rerunRequested=!0;return}this._isRunning=!0;const e=this._maxAgeSeconds?Date.now()-this._maxAgeSeconds*1e3:0,t=await this._timestampModel.expireEntries(e,this._maxEntries),n=await self.caches.open(this._cacheName);for(const a of t)await n.delete(a,this._matchOptions);this._isRunning=!1,this._rerunRequested&&(this._rerunRequested=!1,O(this.expireEntries()))}async updateTimestamp(e){await this._timestampModel.setTimestamp(e,Date.now())}async isURLExpired(e){if(this._maxAgeSeconds){const t=await this._timestampModel.getTimestamp(e),n=Date.now()-this._maxAgeSeconds*1e3;return t!==void 0?t{if(!r)return null;const i=this._isResponseDateFresh(r),c=this._getCacheExpiration(a);O(c.expireEntries());const o=c.updateTimestamp(n.url);if(t)try{t.waitUntil(o)}catch{}return i?r:null},this.cacheDidUpdate=async({cacheName:t,request:n})=>{const a=this._getCacheExpiration(t);await a.updateTimestamp(n.url),await a.expireEntries()},this._config=e,this._maxAgeSeconds=e.maxAgeSeconds,this._cacheExpirations=new Map,e.purgeOnQuotaError&&Y(()=>this.deleteCacheAndMetadata())}_getCacheExpiration(e){if(e===b.getRuntimeName())throw new l("expire-custom-caches-only");let t=this._cacheExpirations.get(e);return t||(t=new Ue(e,this._config),this._cacheExpirations.set(e,t)),t}_isResponseDateFresh(e){if(!this._maxAgeSeconds)return!0;const t=this._getDateHeaderTimestamp(e);if(t===null)return!0;const n=Date.now();return t>=n-this._maxAgeSeconds*1e3}_getDateHeaderTimestamp(e){if(!e.headers.has("date"))return null;const t=e.headers.get("date"),a=new Date(t).getTime();return isNaN(a)?null:a}async deleteCacheAndMetadata(){for(const[e,t]of this._cacheExpirations)await self.caches.delete(e),await t.delete();this._cacheExpirations=new Map}}try{self["workbox:precaching:7.2.0"]&&_()}catch{}const Ae="__WB_REVISION__";function Pe(s){if(!s)throw new l("add-to-cache-list-unexpected-type",{entry:s});if(typeof s=="string"){const r=new URL(s,location.href);return{cacheKey:r.href,url:r.href}}const{revision:e,url:t}=s;if(!t)throw new l("add-to-cache-list-unexpected-type",{entry:s});if(!e){const r=new URL(t,location.href);return{cacheKey:r.href,url:r.href}}const n=new URL(t,location.href),a=new URL(t,location.href);return n.searchParams.set(Ae,e),{cacheKey:n.href,url:a.href}}class ke{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:e,state:t})=>{t&&(t.originalRequest=e)},this.cachedResponseWillBeUsed=async({event:e,state:t,cachedResponse:n})=>{if(e.type==="install"&&t&&t.originalRequest&&t.originalRequest instanceof Request){const a=t.originalRequest.url;n?this.notUpdatedURLs.push(a):this.updatedURLs.push(a)}return n}}}class Ie{constructor({precacheController:e}){this.cacheKeyWillBeUsed=async({request:t,params:n})=>{const a=n?.cacheKey||this._precacheController.getCacheKeyForURL(t.url);return a?new Request(a,{headers:t.headers}):t},this._precacheController=e}}class p extends T{constructor(e={}){e.cacheName=b.getPrecacheName(e.cacheName),super(e),this._fallbackToNetwork=e.fallbackToNetwork!==!1,this.plugins.push(p.copyRedirectedCacheableResponsesPlugin)}async _handle(e,t){const n=await t.cacheMatch(e);return n||(t.event&&t.event.type==="install"?await this._handleInstall(e,t):await this._handleFetch(e,t))}async _handleFetch(e,t){let n;const a=t.params||{};if(this._fallbackToNetwork){const r=a.integrity,i=e.integrity,c=!i||i===r;n=await t.fetch(new Request(e,{integrity:e.mode!=="no-cors"?i||r:void 0})),r&&c&&e.mode!=="no-cors"&&(this._useDefaultCacheabilityPluginIfNeeded(),await t.cachePut(e,n.clone()))}else throw new l("missing-precache-entry",{cacheName:this.cacheName,url:e.url});return n}async _handleInstall(e,t){this._useDefaultCacheabilityPluginIfNeeded();const n=await t.fetch(e);if(!await t.cachePut(e,n.clone()))throw new l("bad-precaching-response",{url:e.url,status:n.status});return n}_useDefaultCacheabilityPluginIfNeeded(){let e=null,t=0;for(const[n,a]of this.plugins.entries())a!==p.copyRedirectedCacheableResponsesPlugin&&(a===p.defaultPrecacheCacheabilityPlugin&&(e=n),a.cacheWillUpdate&&t++);t===0?this.plugins.push(p.defaultPrecacheCacheabilityPlugin):t>1&&e!==null&&this.plugins.splice(e,1)}}p.defaultPrecacheCacheabilityPlugin={async cacheWillUpdate({response:s}){return!s||s.status>=400?null:s}},p.copyRedirectedCacheableResponsesPlugin={async cacheWillUpdate({response:s}){return s.redirected?await re(s):s}};class Se{constructor({cacheName:e,plugins:t=[],fallbackToNetwork:n=!0}={}){this._urlsToCacheKeys=new Map,this._urlsToCacheModes=new Map,this._cacheKeysToIntegrities=new Map,this._strategy=new p({cacheName:b.getPrecacheName(e),plugins:[...t,new Ie({precacheController:this})],fallbackToNetwork:n}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this._strategy}precache(e){this.addToCacheList(e),this._installAndActiveListenersAdded||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this._installAndActiveListenersAdded=!0)}addToCacheList(e){const t=[];for(const n of e){typeof n=="string"?t.push(n):n&&n.revision===void 0&&t.push(n.url);const{cacheKey:a,url:r}=Pe(n),i=typeof n!="string"&&n.revision?"reload":"default";if(this._urlsToCacheKeys.has(r)&&this._urlsToCacheKeys.get(r)!==a)throw new l("add-to-cache-list-conflicting-entries",{firstEntry:this._urlsToCacheKeys.get(r),secondEntry:a});if(typeof n!="string"&&n.integrity){if(this._cacheKeysToIntegrities.has(a)&&this._cacheKeysToIntegrities.get(a)!==n.integrity)throw new l("add-to-cache-list-conflicting-integrities",{url:r});this._cacheKeysToIntegrities.set(a,n.integrity)}if(this._urlsToCacheKeys.set(r,a),this._urlsToCacheModes.set(r,i),t.length>0){const c=`Workbox is precaching URLs without revision info: ${t.join(", ")} +This is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(c)}}}install(e){return K(e,async()=>{const t=new ke;this.strategy.plugins.push(t);for(const[r,i]of this._urlsToCacheKeys){const c=this._cacheKeysToIntegrities.get(i),o=this._urlsToCacheModes.get(r),h=new Request(r,{integrity:c,cache:o,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:i},request:h,event:e}))}const{updatedURLs:n,notUpdatedURLs:a}=t;return{updatedURLs:n,notUpdatedURLs:a}})}activate(e){return K(e,async()=>{const t=await self.caches.open(this.strategy.cacheName),n=await t.keys(),a=new Set(this._urlsToCacheKeys.values()),r=[];for(const i of n)a.has(i.url)||(await t.delete(i),r.push(i.url));return{deletedURLs:r}})}getURLsToCacheKeys(){return this._urlsToCacheKeys}getCachedURLs(){return[...this._urlsToCacheKeys.keys()]}getCacheKeyForURL(e){const t=new URL(e,location.href);return this._urlsToCacheKeys.get(t.href)}getIntegrityForCacheKey(e){return this._cacheKeysToIntegrities.get(e)}async matchPrecache(e){const t=e instanceof Request?e.url:e,n=this.getCacheKeyForURL(t);if(n)return(await self.caches.open(this.strategy.cacheName)).match(n)}createHandlerBoundToURL(e){const t=this.getCacheKeyForURL(e);if(!t)throw new l("non-precached-url",{url:e});return n=>(n.request=new Request(e),n.params=Object.assign({cacheKey:t},n.params),this.strategy.handle(n))}}let M;const Q=()=>(M||(M=new Se),M);function Me(s,e=[]){for(const t of[...s.searchParams.keys()])e.some(n=>n.test(t))&&s.searchParams.delete(t);return s}function*Ne(s,{ignoreURLParametersMatching:e=[/^utm_/,/^fbclid$/],directoryIndex:t="index.html",cleanURLs:n=!0,urlManipulation:a}={}){const r=new URL(s,location.href);r.hash="",yield r.href;const i=Me(r,e);if(yield i.href,t&&i.pathname.endsWith("/")){const c=new URL(i.href);c.pathname+=t,yield c.href}if(n){const c=new URL(i.href);c.pathname+=".html",yield c.href}if(a){const c=a({url:r});for(const o of c)yield o.href}}class ve extends m{constructor(e,t){const n=({request:a})=>{const r=e.getURLsToCacheKeys();for(const i of Ne(a.url,t)){const c=r.get(i);if(c){const o=e.getIntegrityForCacheKey(c);return{cacheKey:c,integrity:o}}}};super(n,e.strategy)}}function Oe(s){const e=Q(),t=new ve(e,s);D(t)}function Ke(s){Q().precache(s)}function Be(s,e){Ke(s),Oe(e)}const x={TIMEZONE:"Europe/Vienna",SEASON:new Date().getFullYear(),API_BASE:"https://api.hardbulls.com/",BULLS_LEAGUES:["bbl"],ASSET_JSON_CACHE_TTL:60*60,ASSET_IMAGE_CACHE_TTL:60*60*24};self.__WB_DISABLE_DEV_LOGS=!0,self.addEventListener("install",async s=>{await self.skipWaiting()}),ie(),Be([{"revision":"ea813ba5b96b888d3017a4e37f2db3a1","url":"_dummy.FC0hjmpd.js"},{"revision":"8f303144055832783ee827a6fed39ca5","url":"assets/config-BSEdrMJ9.js"},{"revision":"32f094cddb03a6a63379e605800a36c6","url":"favicon.ico"},{"revision":"0de804844936ad8a5b09a62825d81e5c","url":"icon-192x192.png"},{"revision":"c4aab75a66e536fbc3bc71eaa918b919","url":"icon-512x512.png"},{"revision":"62290b252e06e8e69e038cef1e46364f","url":"icon.svg"},{"revision":"459c024ec54fcd6e6dd6352164f3874a","url":"icons/baseball-helmet.svg"},{"revision":"ed102eaef5e3f23a0bf5a2ba658cae5f","url":"icons/baseball.svg"},{"revision":"78cc32f1b1611d9880bef2fef0708ebf","url":"icons/calendar-dots.svg"},{"revision":"c18781107d773375d30063731b8c4eab","url":"icons/dots-three-circle.svg"},{"revision":"ac7da8ce255583a24fd32c3f4c6fa655","url":"icons/download.svg"},{"revision":"b77014424f62dedc9b471b489a67897c","url":"icons/house-line.svg"},{"revision":"f9ee48fbe9771975ed99e94ca1675b9c","url":"images/background_landscape.webp"},{"revision":"e757cc99b4f210e1985bc58d051cab97","url":"images/background_portrait.webp"},{"revision":"54c503e4b4a56eab00d11ed5c391b153","url":"index.html"},{"revision":"653637a4f1b7a49ac038af4c026f4351","url":"logos/bull.svg"},{"revision":"c03d47b23901a7715c07531772156036","url":"logos/bulls_mlb.svg"},{"revision":"ff6fc0bbd39075b09d61ff5240cf1bc3","url":"logos/hb.svg"},{"revision":"c2148ad9481c3cf4f661fb4bd036bf09","url":"main.DKMXZ9nr.js"},{"revision":"86f930f916b73981e8a03ad811e1c727","url":"manifest.json"}]),D(new RegExp(`^${W(x.API_BASE)}api/.*\\.json$`),new fe({cacheName:"api-json-cache",plugins:[new G({purgeOnQuotaError:!0,maxAgeSeconds:x.ASSET_JSON_CACHE_TTL})]})),D(new RegExp(`^${W(x.API_BASE)}assets/.*\\.(?:png|jpg|jpeg|svg|webp)$`),new ue({cacheName:"api-assets-cache-v1",plugins:[new G({maxAgeSeconds:x.ASSET_IMAGE_CACHE_TTL,purgeOnQuotaError:!0})]}))})();