diff --git a/.gitignore b/.gitignore index 671499a..23b58a4 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,5 @@ node_modules Thumbs.db loconfig.*.json !loconfig.example.json -.prettierrc \ No newline at end of file +.prettierrc +www/**/*.html diff --git a/assets.json b/assets.json index ea3c8bc..d545d21 100644 --- a/assets.json +++ b/assets.json @@ -1,3 +1,3 @@ { - "version": 1705435510121 + "version": 1705619201399 } \ No newline at end of file diff --git a/assets/scripts/modules/Load.js b/assets/scripts/modules/Load.js index ff01e21..2f658df 100644 --- a/assets/scripts/modules/Load.js +++ b/assets/scripts/modules/Load.js @@ -15,25 +15,25 @@ export default class extends module { new SwupFragmentPlugin({ rules: [ { - from: ['/','/index.php','/index.php/per_page/:per_page/page/:page'], - to: ['/','/index.php','/index.php/per_page/:per_page/page/:page'], + from: ['/projects/:page?'], + to: ['/projects/:page?'], containers: ['#paginated'] }, { - from: ['/','/index.php', '/index.php/per_page/:per_page/page/:page'], - to: ['/index.php/modal/:modal'], + from: ['/projects/:page?'], + to: ['/project/:slug'], containers: ['#modal'], name: 'open-modal' }, { - from: ['/index.php/modal/:modal'], - to: ['/index.php/modal/:modal'], + from: ['/project/:slug'], + to: ['/project/:slug'], containers: ['#modal'], name: 'modal-update' }, { - from: ['/index.php/modal/:modal'], - to: ['/','/index.php', '/index.php/per_page/:per_page/page/:page'], + from: ['/project/:slug'], + to: ['/projects/:page?'], containers: ['#modal', '#paginated'], name: 'close-modal' }, diff --git a/build/build.js b/build/build.js index 9ca6a69..d90938f 100644 --- a/build/build.js +++ b/build/build.js @@ -1,9 +1,11 @@ +import buildEleventy from './tasks/eleventy.js'; import concatFiles from './tasks/concats.js'; import compileScripts from './tasks/scripts.js'; import compileStyles from './tasks/styles.js'; import compileSVGs from './tasks/svgs.js'; import bumpVersions from './tasks/versions.js'; +buildEleventy(); concatFiles(); compileScripts(); compileStyles(); diff --git a/build/tasks/eleventy.js b/build/tasks/eleventy.js new file mode 100644 index 0000000..a12021e --- /dev/null +++ b/build/tasks/eleventy.js @@ -0,0 +1,50 @@ +import message from '../helpers/message.js'; +import { merge } from '../utils/index.js'; +import Eleventy from "@11ty/eleventy"; + +export const defaultEleventyOptions = { + production: true +} + +export const developmentEleventyOptions = { + production: false +} + +export const productionEleventyOptions = { + production: true +} + +let elev; +export default async function buildEleventy(eleventyOptions = null) { + if (eleventyOptions == null) { + eleventyOptions = productionEleventyOptions; + } else if ( + eleventyOptions !== developmentEleventyOptions && + eleventyOptions !== productionEleventyOptions + ) { + eleventyOptions = merge({}, defaultEleventyOptions, eleventyOptions); + } + + const { production } = eleventyOptions; + const timeLabel = `11ty compiled in`; + console.time(timeLabel); + + try { + + if(!elev) { + elev = new Eleventy(); + + if(!production) { + await elev.watch(); + } + } + + // Disable caching to ensure a fresh build each time + await elev.write(); + + message(`11ty compiled`, 'success', timeLabel); + } catch(err) { + console.error(err) + message(err, 'error', timeLabel); + } +} diff --git a/build/watch.js b/build/watch.js index 3b0eba7..4f1907f 100644 --- a/build/watch.js +++ b/build/watch.js @@ -2,6 +2,7 @@ import concatFiles, { developmentConcatFilesArgs } from './tasks/concats.js'; import compileScripts, { developmentScriptsArgs } from './tasks/scripts.js'; import compileStyles, { developmentStylesArgs } from './tasks/styles.js' ; import compileSVGs, { developmentSVGsArgs } from './tasks/svgs.js'; +import buildEleventy, { developmentEleventyOptions } from './tasks/eleventy.js'; import loconfig from './helpers/config.js'; import message from './helpers/message.js'; import notification from './helpers/notification.js'; @@ -19,6 +20,7 @@ concatFiles(...developmentConcatFilesArgs); compileScripts(...developmentScriptsArgs); compileStyles(...developmentStylesArgs); compileSVGs(...developmentSVGsArgs); +await buildEleventy(developmentEleventyOptions); // Create a new BrowserSync instance const server = browserSync.create(); @@ -53,10 +55,7 @@ function configureServer(server, { paths, tasks }) { // Reload on any changes to views or processed files server.watch( [ - ...views, - join(paths.scripts.dest, '*.js'), - join(paths.styles.dest, '*.css'), - join(paths.svgs.dest, '*.svg'), + join(paths.dest, '**/*') ] ).on('change', server.reload); diff --git a/data/metadata.json b/data/metadata.json new file mode 100644 index 0000000..22b89c2 --- /dev/null +++ b/data/metadata.json @@ -0,0 +1,4 @@ +{ + "title": "Locomotive Boilerplate", + "description": "Front-end boilerplate for projects by Locomotive." +} diff --git a/data/projects.json b/data/projects.json new file mode 100644 index 0000000..b4f0a64 --- /dev/null +++ b/data/projects.json @@ -0,0 +1,34 @@ +[ + { + "title": "Lusail Stadium", + "desc": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Scelerisque viverra mauris in aliquam sem fringilla ut morbi tincidunt. In dictum non consectetur a erat nam at lectus urna. Ullamcorper dignissim cras tincidunt lobortis feugiat vivamus at augue." + }, + { + "title": "Tottenham Hotspur Stadium", + "desc": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Interdum posuere lorem ipsum dolor sit amet consectetur adipiscing. Eget mi proin sed libero enim sed. Tincidunt id aliquet risus feugiat in ante metus." + }, + { + "title": "Narendra Modi Stadium", + "desc": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Vitae tempus quam pellentesque nec nam aliquam. Velit laoreet id donec ultrices tincidunt. Tincidunt lobortis feugiat vivamus at augue eget arcu." + }, + { + "title": "Texas A&M Kyle Field", + "desc": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Adipiscing diam donec adipiscing tristique risus nec feugiat in fermentum. Integer malesuada nunc vel risus commodo viverra maecenas accumsan. Dui faucibus in ornare quam viverra orci sagittis." + }, + { + "title": "The Cathedral — A New Icon for Milan", + "desc": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Scelerisque viverra mauris in aliquam sem fringilla ut morbi tincidunt. In dictum non consectetur a erat nam at lectus urna. Ullamcorper dignissim cras tincidunt lobortis feugiat vivamus at augue." + }, + { + "title": "Allianz Field", + "desc": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Interdum posuere lorem ipsum dolor sit amet consectetur adipiscing. Eget mi proin sed libero enim sed. Tincidunt id aliquet risus feugiat in ante metus." + }, + { + "title": "TQL Stadium", + "desc": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Vitae tempus quam pellentesque nec nam aliquam. Velit laoreet id donec ultrices tincidunt. Tincidunt lobortis feugiat vivamus at augue eget arcu." + }, + { + "title": "Groupama Stadium and Training Centre", + "desc": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Adipiscing diam donec adipiscing tristique risus nec feugiat in fermentum. Integer malesuada nunc vel risus commodo viverra maecenas accumsan. Dui faucibus in ornare quam viverra orci sagittis." + } +] diff --git a/eleventy.config.cjs b/eleventy.config.cjs new file mode 100644 index 0000000..b1cf23c --- /dev/null +++ b/eleventy.config.cjs @@ -0,0 +1,71 @@ +// Import required modules +const twig = require("twig"); +const fs = require('fs') +const eleventyPluginTwig = require("@factorial/eleventy-plugin-twig"); + +// Export Eleventy configuration +module.exports = function(eleventyConfig) { + // Function to generate a version identifier + function generateVersion() { + // You can use a timestamp, a hash of asset files, or any other method you prefer + return Date.now(); + } + + eleventyConfig.setServerOptions({ + enabled: false, + }); + + eleventyConfig.addWatchTarget("views/**/*"); + + // Use twig + eleventyConfig.addPlugin(eleventyPluginTwig, { + twig: { + namespaces: { + layouts: "views/layouts", + partials: "views/partials", + snippets: "views/snippets" + } + }, + dir: { + input: 'views/templates', + output: 'www' + } + }); + + twig.extendFilter("log", function(value) { + return '
'+JSON.stringify(value)+'
'; + }); + + twig.extendFilter("slug", function(str) { + return str + .toLowerCase() // Convert the string to lowercase + .replace(/\s+/g, '-') // Replace spaces with dashes + .replace(/[^\w-]/g, '') // Remove non-word characters + .replace(/--+/g, '-') // Replace consecutive dashes with a single dash + .trim(); // Trim any leading or trailing dashes + }) + + // // Add a filter to append the version to asset URLs + twig.extendFilter('version', function(url) { + const version = generateVersion(); + return `${url}?v=${version}`; + }); + + twig.extendFunction("critical_css", function() { + try { + return fs.readFileSync('./www/assets/styles/critical.css', 'utf-8') + } catch(error) { + return ''; + } + }); + + // Configure and return Eleventy settings + return { + templateFormats: ['twig'], + dir: { + input: 'views/templates', + output: 'www', + data: '../../data' + } + }; +}; diff --git a/loconfig.json b/loconfig.json index eb3f79d..1200102 100755 --- a/loconfig.json +++ b/loconfig.json @@ -19,7 +19,10 @@ "dest": "./www/assets/images" }, "views": { - "src": "./www/" + "src": "./views/" + }, + "data": { + "src": "./data/" } }, "tasks": { diff --git a/package-lock.json b/package-lock.json index 3109621..8ebbee3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,6 +17,8 @@ "swup": "^4.5.1" }, "devDependencies": { + "@11ty/eleventy": "^2.0.1", + "@factorial/eleventy-plugin-twig": "^0.1.2", "autoprefixer": "^10.4.13", "browser-sync": "^3.0.2", "concat": "^1.0.3", @@ -27,13 +29,664 @@ "purgecss": "^5.0.0", "sass": "^1.69.5", "svg-mixer": "~2.3.14", - "tiny-glob": "^0.2.9" + "tiny-glob": "^0.2.9", + "twig": "^1.16.0" }, "engines": { "node": ">=20.1", "npm": ">=8.0" } }, + "node_modules/@11ty/dependency-tree": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@11ty/dependency-tree/-/dependency-tree-2.0.1.tgz", + "integrity": "sha512-5R+DsT9LJ9tXiSQ4y+KLFppCkQyXhzAm1AIuBWE/sbU0hSXY5pkhoqQYEcPJQFg/nglL+wD55iv2j+7O96UAvg==", + "dev": true + }, + "node_modules/@11ty/eleventy": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@11ty/eleventy/-/eleventy-2.0.1.tgz", + "integrity": "sha512-t8XVUbCJByhVEa1RzO0zS2QzbL3wPY8ot1yUw9noqiSHxJWUwv6jiwm1/MZDPTYtkZH2ZHvdQIRQ5/SjG9XmLw==", + "dev": true, + "dependencies": { + "@11ty/dependency-tree": "^2.0.1", + "@11ty/eleventy-dev-server": "^1.0.4", + "@11ty/eleventy-utils": "^1.0.1", + "@11ty/lodash-custom": "^4.17.21", + "@iarna/toml": "^2.2.5", + "@sindresorhus/slugify": "^1.1.2", + "bcp-47-normalize": "^1.1.1", + "chokidar": "^3.5.3", + "cross-spawn": "^7.0.3", + "debug": "^4.3.4", + "dependency-graph": "^0.11.0", + "ejs": "^3.1.9", + "fast-glob": "^3.2.12", + "graceful-fs": "^4.2.11", + "gray-matter": "^4.0.3", + "hamljs": "^0.6.2", + "handlebars": "^4.7.7", + "is-glob": "^4.0.3", + "iso-639-1": "^2.1.15", + "kleur": "^4.1.5", + "liquidjs": "^10.7.0", + "luxon": "^3.3.0", + "markdown-it": "^13.0.1", + "micromatch": "^4.0.5", + "minimist": "^1.2.8", + "moo": "^0.5.2", + "multimatch": "^5.0.0", + "mustache": "^4.2.0", + "normalize-path": "^3.0.0", + "nunjucks": "^3.2.3", + "path-to-regexp": "^6.2.1", + "please-upgrade-node": "^3.2.0", + "posthtml": "^0.16.6", + "posthtml-urls": "^1.0.0", + "pug": "^3.0.2", + "recursive-copy": "^2.0.14", + "semver": "^7.3.8", + "slugify": "^1.6.6" + }, + "bin": { + "eleventy": "cmd.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/11ty" + } + }, + "node_modules/@11ty/eleventy-dev-server": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@11ty/eleventy-dev-server/-/eleventy-dev-server-1.0.4.tgz", + "integrity": "sha512-qVBmV2G1KF/0o5B/3fITlrrDHy4bONUI2YuN3/WJ3BNw4NU1d/we8XhKrlgq13nNvHoBx5czYp3LZt8qRG53Fg==", + "dev": true, + "dependencies": { + "@11ty/eleventy-utils": "^1.0.1", + "chokidar": "^3.5.3", + "debug": "^4.3.4", + "dev-ip": "^1.0.1", + "finalhandler": "^1.2.0", + "mime": "^3.0.0", + "minimist": "^1.2.8", + "morphdom": "^2.7.0", + "please-upgrade-node": "^3.2.0", + "ssri": "^8.0.1", + "ws": "^8.13.0" + }, + "bin": { + "eleventy-dev-server": "cmd.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/11ty" + } + }, + "node_modules/@11ty/eleventy-dev-server/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@11ty/eleventy-dev-server/node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@11ty/eleventy-dev-server/node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/@11ty/eleventy-dev-server/node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/@11ty/eleventy-dev-server/node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@11ty/eleventy-dev-server/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@11ty/eleventy-dev-server/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@11ty/eleventy-dev-server/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@11ty/eleventy-dev-server/node_modules/ws": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/@11ty/eleventy-fetch": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@11ty/eleventy-fetch/-/eleventy-fetch-4.0.0.tgz", + "integrity": "sha512-wGAd0r+8DUWr22fK5r07dOKuNY6ltA7hX+sJzngGZL1yJmuUVdM/xPQZ+iq0BFgf/ZeRdpVEzf2D0cpVZUuiTg==", + "dev": true, + "peer": true, + "dependencies": { + "debug": "^4.3.4", + "flat-cache": "^3.0.4", + "node-fetch": "^2.6.7", + "p-queue": "^6.6.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/11ty" + } + }, + "node_modules/@11ty/eleventy-fetch/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "peer": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@11ty/eleventy-fetch/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true, + "peer": true + }, + "node_modules/@11ty/eleventy-img": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/@11ty/eleventy-img/-/eleventy-img-3.1.8.tgz", + "integrity": "sha512-9xVqbykggQAHTSiZEo6nUayS8l8nkM7RU8dCjGzikCc8FXSW/E17ytq7SaDngo24D3LZdD+3Gheh4zSeidrImA==", + "dev": true, + "peer": true, + "dependencies": { + "@11ty/eleventy-fetch": "^4.0.0", + "brotli-size": "^4.0.0", + "debug": "^4.3.4", + "entities": "^4.5.0", + "image-size": "^1.0.2", + "p-queue": "^6.6.2", + "sharp": "^0.32.6" + }, + "engines": { + "node": ">=14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/11ty" + } + }, + "node_modules/@11ty/eleventy-img/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "peer": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@11ty/eleventy-img/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/@11ty/eleventy-img/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true, + "peer": true + }, + "node_modules/@11ty/eleventy-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@11ty/eleventy-utils/-/eleventy-utils-1.0.2.tgz", + "integrity": "sha512-Zy2leMK1DQR6Q6ZPSagv7QpJaAz9uVbb+RmVetYFp3foMeQtOSZx7w2u5daRFmP+PeNq9vO9H4xtBToYFWZwHA==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/11ty" + } + }, + "node_modules/@11ty/eleventy-utils/node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@11ty/eleventy/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@11ty/eleventy/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@11ty/eleventy/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/@11ty/eleventy/node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/@11ty/eleventy/node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/@11ty/eleventy/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/@11ty/eleventy/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/@11ty/eleventy/node_modules/entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/@11ty/eleventy/node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@11ty/eleventy/node_modules/htmlparser2": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", + "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.2", + "domutils": "^2.8.0", + "entities": "^3.0.1" + } + }, + "node_modules/@11ty/eleventy/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/@11ty/eleventy/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@11ty/eleventy/node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/@11ty/eleventy/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@11ty/eleventy/node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@11ty/eleventy/node_modules/posthtml": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.16.6.tgz", + "integrity": "sha512-JcEmHlyLK/o0uGAlj65vgg+7LIms0xKXe60lcDOTU7oVX/3LuEuLwrQpW3VJ7de5TaFKiW4kWkaIpJL42FEgxQ==", + "dev": true, + "dependencies": { + "posthtml-parser": "^0.11.0", + "posthtml-render": "^3.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@11ty/eleventy/node_modules/posthtml-parser": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.11.0.tgz", + "integrity": "sha512-QecJtfLekJbWVo/dMAA+OSwY79wpRmbqS5TeXvXSX+f0c6pW4/SE6inzZ2qkU7oAMCPqIDkZDvd/bQsSFUnKyw==", + "dev": true, + "dependencies": { + "htmlparser2": "^7.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@11ty/eleventy/node_modules/posthtml-render": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-3.0.0.tgz", + "integrity": "sha512-z+16RoxK3fUPgwaIgH9NGnK1HKY9XIDpydky5eQGgAFVXTCSezalv9U2jQuNV+Z9qV1fDWNzldcw4eK0SSbqKA==", + "dev": true, + "dependencies": { + "is-json": "^2.0.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@11ty/eleventy/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@11ty/eleventy/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/@11ty/lodash-custom": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@11ty/lodash-custom/-/lodash-custom-4.17.21.tgz", + "integrity": "sha512-Mqt6im1xpb1Ykn3nbcCovWXK3ggywRJa+IXIdoz4wIIK+cvozADH63lexcuPpGS/gJ6/m2JxyyXDyupkMr5DHw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/11ty" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", + "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.8.tgz", + "integrity": "sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", + "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@esbuild/android-arm": { "version": "0.17.6", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.6.tgz", @@ -386,6 +1039,116 @@ "node": ">=12" } }, + "node_modules/@factorial/eleventy-plugin-twig": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@factorial/eleventy-plugin-twig/-/eleventy-plugin-twig-0.1.2.tgz", + "integrity": "sha512-/wAJBrwkd+HtkfxRpYhUff1sRZHzkTUVf1xyFVZjoreLfSXXK+lJVbopC6YhZEcz/pA/BbMITd4TD6E9j45lyg==", + "dev": true, + "dependencies": { + "@11ty/eleventy-utils": "^1.0.1" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "@11ty/eleventy-img": "^3.0.0", + "twig": "^1.15.4" + } + }, + "node_modules/@iarna/toml": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", + "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==", + "dev": true + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@sindresorhus/slugify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@sindresorhus/slugify/-/slugify-1.1.2.tgz", + "integrity": "sha512-V9nR/W0Xd9TSGXpZ4iFUcFGhuOJtZX82Fzxj1YISlbSgKvIiNa7eLEZrT0vAraPOt++KHauIVNYgGRgjc13dXA==", + "dev": true, + "dependencies": { + "@sindresorhus/transliterate": "^0.1.1", + "escape-string-regexp": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@sindresorhus/slugify/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@sindresorhus/transliterate": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@sindresorhus/transliterate/-/transliterate-0.1.2.tgz", + "integrity": "sha512-5/kmIOY9FF32nicXH+5yLNTX4NJ4atl7jRgqAJuIn/iyDFXBktOKDxCvyGE/EzmF4ngSUvjXxQUQlQiZ5lfw+w==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0", + "lodash.deburr": "^4.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@sindresorhus/transliterate/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/@socket.io/component-emitter": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", @@ -431,12 +1194,24 @@ "@types/node": "*" } }, + "node_modules/@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, "node_modules/@types/node": { "version": "18.13.0", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.13.0.tgz", "integrity": "sha512-gC3TazRzGoOnoKAhUx+Q0t8S9Tzs74z7m0ipwGpSqQrleP14hKxP4/JUeEQcD3W1/aIpnWl8pHowI7WokuZpXg==", "dev": true }, + "node_modules/a-sync-waterfall": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz", + "integrity": "sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==", + "dev": true + }, "node_modules/abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -456,6 +1231,18 @@ "node": ">= 0.6" } }, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -487,6 +1274,12 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/any-promise": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-0.1.0.tgz", + "integrity": "sha512-lqzY9o+BbeGHRCOyxQkt/Tgvz0IZhTmQiA+LxQW8wSNpcTbj8K+0cZiSEvbpNZZP9/11Gy7dnLO3GNWUXO4d1g==", + "dev": true + }, "node_modules/anymatch": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", @@ -497,6 +1290,15 @@ "normalize-path": "^2.1.1" } }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, "node_modules/arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", @@ -524,6 +1326,33 @@ "node": ">=0.10.0" } }, + "node_modules/array-differ": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", + "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", @@ -533,6 +1362,27 @@ "node": ">=0.10.0" } }, + "node_modules/arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true + }, + "node_modules/assert-never": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.2.1.tgz", + "integrity": "sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw==", + "dev": true + }, "node_modules/assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", @@ -605,6 +1455,25 @@ "postcss": "^8.1.0" } }, + "node_modules/b4a": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz", + "integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==", + "dev": true, + "peer": true + }, + "node_modules/babel-walk": { + "version": "3.0.0-canary-5", + "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", + "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.9.6" + }, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -679,6 +1548,27 @@ "node": ">=0.10.0" } }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peer": true + }, "node_modules/base64id": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", @@ -694,6 +1584,45 @@ "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", "dev": true }, + "node_modules/bcp-47": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/bcp-47/-/bcp-47-1.0.8.tgz", + "integrity": "sha512-Y9y1QNBBtYtv7hcmoX0tR+tUNSFZGZ6OL6vKPObq8BbOhkCoyayF6ogfLTgAli/KuAEbsYHYUNq2AQuY6IuLag==", + "dev": true, + "dependencies": { + "is-alphabetical": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/bcp-47-match": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bcp-47-match/-/bcp-47-match-1.0.3.tgz", + "integrity": "sha512-LggQ4YTdjWQSKELZF5JwchnBa1u0pIQSZf5lSdOHEdbVP55h0qICA/FUp3+W99q0xqxYa1ZQizTUH87gecII5w==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/bcp-47-normalize": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/bcp-47-normalize/-/bcp-47-normalize-1.1.1.tgz", + "integrity": "sha512-jWZ1Jdu3cs0EZdfCkS0UE9Gg01PtxnChjEBySeB+Zo6nkqtFfnvtoQQgP1qU1Oo4qgJgxhTI6Sf9y/pZIhPs0A==", + "dev": true, + "dependencies": { + "bcp-47": "^1.0.0", + "bcp-47-match": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -703,6 +1632,33 @@ "node": ">=8" } }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "peer": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "peer": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -746,6 +1702,19 @@ "node": ">=0.10.0" } }, + "node_modules/brotli-size": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/brotli-size/-/brotli-size-4.0.0.tgz", + "integrity": "sha512-uA9fOtlTRC0iqKfzff1W34DXUA3GyVqbUaeo3Rw3d4gd1eavKVCETXrn3NzO74W+UVkG3UHu8WxUi+XvKI/huA==", + "dev": true, + "peer": true, + "dependencies": { + "duplexer": "0.1.1" + }, + "engines": { + "node": ">= 10.16.0" + } + }, "node_modules/browser-sync": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-3.0.2.tgz", @@ -950,6 +1919,31 @@ "integrity": "sha512-BXvDkqhDNxXEjeGM8LFkSbR+jzmP/CYpCiVKYn+soB1dDldeU15EBNDkwVXndKuX35wnNUaPd0qSoQEAkmQtMw==", "dev": true }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peer": true, + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -979,6 +1973,20 @@ "node": ">=0.10.0" } }, + "node_modules/call-bind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", @@ -1024,6 +2032,15 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/character-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", + "integrity": "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==", + "dev": true, + "dependencies": { + "is-regex": "^1.0.3" + } + }, "node_modules/chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -1118,6 +2135,13 @@ "node": ">=8.0" } }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true, + "peer": true + }, "node_modules/class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", @@ -1192,6 +2216,20 @@ "node": ">=0.10.0" } }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -1210,6 +2248,17 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, "node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -1315,6 +2364,16 @@ "node": ">=0.8" } }, + "node_modules/constantinople": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", + "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.6.0", + "@babel/types": "^7.6.1" + } + }, "node_modules/cookie": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", @@ -1352,6 +2411,20 @@ "node": ">= 0.10" } }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -1391,6 +2464,32 @@ "node": ">=0.10" } }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "peer": true, + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/deepmerge": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", @@ -1400,6 +2499,20 @@ "node": ">=0.10.0" } }, + "node_modules/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/define-property": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", @@ -1471,12 +2584,31 @@ "node": ">= 0.6" } }, + "node_modules/dependency-graph": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", + "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, "node_modules/destroy": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==", "dev": true }, + "node_modules/detect-libc": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", + "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, "node_modules/dev-ip": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz", @@ -1489,6 +2621,12 @@ "node": ">= 0.8.0" } }, + "node_modules/doctypes": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", + "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==", + "dev": true + }, "node_modules/dom-serializer": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", @@ -1524,6 +2662,13 @@ "domelementtype": "1" } }, + "node_modules/duplexer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha512-sxNZ+ljy+RA1maXoUReeqBBpBC6RLKmg5ewzV+x+mSETmWNoKdZN6vcQjpFROemza23hGFskJtFNoUWUaQ+R4Q==", + "dev": true, + "peer": true + }, "node_modules/easy-extender": { "version": "2.3.4", "resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.4.tgz", @@ -1569,6 +2714,21 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "dev": true }, + "node_modules/ejs": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", + "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", + "dev": true, + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/electron-to-chromium": { "version": "1.4.272", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.272.tgz", @@ -1590,6 +2750,16 @@ "node": ">= 0.8" } }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "peer": true, + "dependencies": { + "once": "^1.4.0" + } + }, "node_modules/engine.io": { "version": "6.4.2", "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.4.2.tgz", @@ -1767,6 +2937,19 @@ "node": ">=0.8.0" } }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", @@ -1824,6 +3007,16 @@ "node": ">=0.10.0" } }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, "node_modules/extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", @@ -1936,12 +3129,132 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "dev": true, + "peer": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fast-glob/node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fast-glob/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/fast-glob/node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/fast-glob/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, + "node_modules/fastq": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", + "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", @@ -2000,6 +3313,28 @@ "node": ">=8" } }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "peer": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "dev": true, + "peer": true + }, "node_modules/follow-redirects": { "version": "1.15.2", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", @@ -2029,6 +3364,12 @@ "node": ">=0.10.0" } }, + "node_modules/foreachasync": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/foreachasync/-/foreachasync-3.0.0.tgz", + "integrity": "sha512-J+ler7Ta54FwwNcx6wQRDhTIbNeyDcARMkOcguEqnEdtm0jKvN3Li3PDAb2Du3ubJYEWfYL83XMROXdsXAXycw==", + "dev": true + }, "node_modules/fraction.js": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", @@ -2063,6 +3404,13 @@ "node": ">= 0.6" } }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true, + "peer": true + }, "node_modules/fs-extra": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", @@ -2094,6 +3442,15 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -2103,6 +3460,21 @@ "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/get-intrinsic": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", @@ -2112,6 +3484,13 @@ "node": ">=0.10.0" } }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "dev": true, + "peer": true + }, "node_modules/glob": { "version": "7.1.4", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", @@ -2166,18 +3545,72 @@ "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", "dev": true }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/graceful-fs": { - "version": "4.2.9", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, + "node_modules/gray-matter": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", + "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", + "dev": true, + "dependencies": { + "js-yaml": "^3.13.1", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" + }, + "engines": { + "node": ">=6.0" + } + }, "node_modules/growly": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", "dev": true }, + "node_modules/hamljs": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/hamljs/-/hamljs-0.6.2.tgz", + "integrity": "sha512-/chXRp4WpL47I+HX1vCCdSbEXAljEG2FBMmgO7Am0bYsqgnEjreeWzUdX1onXqwZtcfgxbCg5WtEYYvuZ5muBg==", + "dev": true + }, + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -2187,6 +3620,57 @@ "node": ">=8" } }, + "node_modules/has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", @@ -2226,6 +3710,18 @@ "node": ">=0.10.0" } }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -2263,6 +3759,15 @@ "node": ">= 6" } }, + "node_modules/http-equiv-refresh": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/http-equiv-refresh/-/http-equiv-refresh-1.0.0.tgz", + "integrity": "sha512-TScO04soylRN9i/QdOdgZyhydXg9z6XdaGzEyOgDKycePeDeTT4KvigjBcI+tgfTlieLWauGORMq5F1eIDa+1w==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/http-errors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", @@ -2323,6 +3828,43 @@ "node": ">=0.10.0" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peer": true + }, + "node_modules/image-size": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.1.1.tgz", + "integrity": "sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ==", + "dev": true, + "peer": true, + "dependencies": { + "queue": "6.0.2" + }, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=16.x" + } + }, "node_modules/immutable": { "version": "3.8.2", "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", @@ -2378,6 +3920,37 @@ "node": ">=0.10.0" } }, + "node_modules/is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "dev": true, + "dependencies": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "dev": true, + "peer": true + }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -2396,6 +3969,18 @@ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", @@ -2420,6 +4005,16 @@ "node": ">=0.10.0" } }, + "node_modules/is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/is-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", @@ -2458,6 +4053,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-expression": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", + "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", + "dev": true, + "dependencies": { + "acorn": "^7.1.1", + "object-assign": "^4.1.1" + } + }, "node_modules/is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", @@ -2497,6 +4102,12 @@ "node": ">=0.10.0" } }, + "node_modules/is-json": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-json/-/is-json-2.0.1.tgz", + "integrity": "sha512-6BEnpVn1rcf3ngfmViLM6vjUjGErbdrL4rwlv+u1NO1XO8kqT4YGL8+19Q+Z/bas8tY90BTWMk2+fW1g6hQjbA==", + "dev": true + }, "node_modules/is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -2551,6 +4162,28 @@ "node": ">=0.10.0" } }, + "node_modules/is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", + "dev": true + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-whitespace": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/is-whitespace/-/is-whitespace-0.3.0.tgz", @@ -2590,6 +4223,15 @@ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, + "node_modules/iso-639-1": { + "version": "2.1.15", + "resolved": "https://registry.npmjs.org/iso-639-1/-/iso-639-1-2.1.15.tgz", + "integrity": "sha512-7c7mBznZu2ktfvyT582E2msM+Udc1EjOyhVRE/0ZsjD9LBtWSm23h3PtiRh2a35XoUsTQQjJXaJzuLjXsOdFDg==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, "node_modules/isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", @@ -2599,6 +4241,42 @@ "node": ">=0.10.0" } }, + "node_modules/jake": { + "version": "10.8.7", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", + "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", + "dev": true, + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jake/node_modules/async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", + "dev": true + }, + "node_modules/jake/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/js-beautify": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.13.0.tgz", @@ -2617,6 +4295,32 @@ "js-beautify": "js/bin/js-beautify.js" } }, + "node_modules/js-stringify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", + "integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "peer": true + }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -2632,6 +4336,35 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/jstransformer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", + "integrity": "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==", + "dev": true, + "dependencies": { + "is-promise": "^2.0.0", + "promise": "^7.0.1" + } + }, + "node_modules/junk": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/junk/-/junk-1.0.3.tgz", + "integrity": "sha512-3KF80UaaSSxo8jVnRYtMKNGFOoVPBdkkVPsw+Ad0y4oxKXPduS6G6iHkrf69yJVff/VAaYXkV42rtZ7daJxU3w==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "peer": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -2656,6 +4389,50 @@ "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==", "dev": true }, + "node_modules/linkify-it": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-4.0.1.tgz", + "integrity": "sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==", + "dev": true, + "dependencies": { + "uc.micro": "^1.0.1" + } + }, + "node_modules/liquidjs": { + "version": "10.10.0", + "resolved": "https://registry.npmjs.org/liquidjs/-/liquidjs-10.10.0.tgz", + "integrity": "sha512-f4gPvCq4uV4Fm5YezVUQoAMPmBMEuIE2LvgCnzyWoPRx+ZefH6b8DU2eb7znltRqATHF8zYvOsd5FD2z1spJgg==", + "dev": true, + "dependencies": { + "commander": "^10.0.0" + }, + "bin": { + "liquid": "bin/liquid.js", + "liquidjs": "bin/liquid.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/liquidjs" + } + }, + "node_modules/liquidjs/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/list-to-array": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/list-to-array/-/list-to-array-1.1.0.tgz", + "integrity": "sha512-+dAZZ2mM+/m+vY9ezfoueVvrgnHIGi5FvgSymbIgJOFwiznWyA59mav95L+Mc6xPtL3s9gm5eNTlNtxJLbNM1g==", + "dev": true + }, "node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -2679,12 +4456,27 @@ "node": ">=17" } }, + "node_modules/locutus": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/locutus/-/locutus-2.0.16.tgz", + "integrity": "sha512-pGfl6Hb/1mXLzrX5kl5lH7gz25ey0vwQssZp8Qo2CEF59di6KrAgdFm+0pW8ghLnvNzzJGj5tlWhhv2QbK3jeQ==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, + "node_modules/lodash.deburr": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/lodash.deburr/-/lodash.deburr-4.1.0.tgz", + "integrity": "sha512-m/M1U1f3ddMCs6Hq2tAsYThTBDaAKFDX3dwDo97GEYzamXi9SqUpjWi/Rrj/gf3X2n8ktwgZrlP1z6E3v/IExQ==", + "dev": true + }, "node_modules/lodash.isfinite": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", @@ -2707,6 +4499,15 @@ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", "dev": true }, + "node_modules/luxon": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.4.tgz", + "integrity": "sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", @@ -2728,6 +4529,91 @@ "node": ">=0.10.0" } }, + "node_modules/markdown-it": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.2.tgz", + "integrity": "sha512-FtwnEuuK+2yVU7goGn/MJ0WBZMM9ZPgU9spqlFs7/A/pDIUNSOQZhUgOqYCficIuR2QaFnrt8LHqBWsbTAoI5w==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1", + "entities": "~3.0.1", + "linkify-it": "^4.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "bin": { + "markdown-it": "bin/markdown-it.js" + } + }, + "node_modules/markdown-it/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/markdown-it/node_modules/entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/maximatch": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/maximatch/-/maximatch-0.1.0.tgz", + "integrity": "sha512-9ORVtDUFk4u/NFfo0vG/ND/z7UQCVZBL539YW0+U1I7H1BkZwizcPx5foFv7LCPcBnm2U6RjFnQOsIvN4/Vm2A==", + "dev": true, + "dependencies": { + "array-differ": "^1.0.0", + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "minimatch": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/maximatch/node_modules/array-differ": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", + "integrity": "sha512-LeZY+DZDRnvP7eMuQ6LHfCzUGxAAIViUBliK24P3hWXL6y4SortgR6Nim6xrkfSLlmH0+k+9NYNwVC2s53ZrYQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/maximatch/node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", + "dev": true, + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/maximatch/node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", + "dev": true + }, "node_modules/memory-fs": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", @@ -2750,6 +4636,15 @@ "node": ">=4" } }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, "node_modules/micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", @@ -2804,6 +4699,19 @@ "node": ">= 0.6" } }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/minimatch": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", @@ -2816,6 +4724,27 @@ "node": "*" } }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/mitt": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.2.0.tgz", @@ -2859,6 +4788,13 @@ "node": ">=10" } }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true, + "peer": true + }, "node_modules/modujs": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/modujs/-/modujs-1.4.2.tgz", @@ -2869,12 +4805,52 @@ "resolved": "https://registry.npmjs.org/modularload/-/modularload-1.2.8.tgz", "integrity": "sha512-UKYB5nXTcv4DVkXJzwdp9vPw7QFfphkLc3Ka3MeFu9kw27SE/9MZivoHIvrtyUqa4Pt7Ss81h4siSI3dt+5xCQ==" }, + "node_modules/moo": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.2.tgz", + "integrity": "sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==", + "dev": true + }, + "node_modules/morphdom": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/morphdom/-/morphdom-2.7.2.tgz", + "integrity": "sha512-Dqb/lHFyTi7SZpY0a5R4I/0Edo+iPMbaUexsHHsLAByyixCDiLHPHyVoKVmrpL0THcT7V9Cgev9y21TQYq6wQg==", + "dev": true + }, "node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, + "node_modules/multimatch": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", + "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", + "dev": true, + "dependencies": { + "@types/minimatch": "^3.0.3", + "array-differ": "^3.0.0", + "array-union": "^2.1.0", + "arrify": "^2.0.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mustache": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", + "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", + "dev": true, + "bin": { + "mustache": "bin/mustache" + } + }, "node_modules/nanoid": { "version": "3.3.7", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", @@ -2915,6 +4891,13 @@ "node": ">=0.10.0" } }, + "node_modules/napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", + "dev": true, + "peer": true + }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -2924,6 +4907,82 @@ "node": ">= 0.6" } }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/node-abi": { + "version": "3.54.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.54.0.tgz", + "integrity": "sha512-p7eGEiQil0YUV3ItH4/tBb781L5impVmmx2E9FRKF7d18XXzp4PGT2tdYMFY6wQqgxD0IwNZOiSJ0/K0fSi/OA==", + "dev": true, + "peer": true, + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-abi/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "peer": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-abi/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "peer": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-addon-api": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", + "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", + "dev": true, + "peer": true + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "peer": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, "node_modules/node-notifier": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-10.0.1.tgz", @@ -3033,6 +5092,40 @@ "resolved": "https://registry.npmjs.org/normalize.css/-/normalize.css-8.0.1.tgz", "integrity": "sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==" }, + "node_modules/nunjucks": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/nunjucks/-/nunjucks-3.2.4.tgz", + "integrity": "sha512-26XRV6BhkgK0VOxfbU5cQI+ICFUtMLixv1noZn1tGU38kQH5A5nmmbk/O45xdyBhD1esk47nKrY0mvQpZIhRjQ==", + "dev": true, + "dependencies": { + "a-sync-waterfall": "^1.0.0", + "asap": "^2.0.3", + "commander": "^5.1.0" + }, + "bin": { + "nunjucks-precompile": "bin/precompile" + }, + "engines": { + "node": ">= 6.9.0" + }, + "peerDependencies": { + "chokidar": "^3.3.0" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/nunjucks/node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -3145,6 +5238,16 @@ "node": ">=4" } }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, "node_modules/p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -3172,6 +5275,36 @@ "node": ">=8" } }, + "node_modules/p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "dev": true, + "peer": true, + "dependencies": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dev": true, + "peer": true, + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -3181,6 +5314,12 @@ "node": ">=6" } }, + "node_modules/parse-srcset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz", + "integrity": "sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==", + "dev": true + }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -3217,6 +5356,21 @@ "node": ">=0.10.0" } }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, "node_modules/path-to-regexp": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", @@ -3240,6 +5394,24 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/please-upgrade-node": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", + "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", + "dev": true, + "dependencies": { + "semver-compare": "^1.0.0" + } + }, "node_modules/portscanner": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.2.0.tgz", @@ -3380,6 +5552,21 @@ "node": ">=10" } }, + "node_modules/posthtml-urls": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/posthtml-urls/-/posthtml-urls-1.0.0.tgz", + "integrity": "sha512-CMJ0L009sGQVUuYM/g6WJdscsq6ooAwhUuF6CDlYPMLxKp2rmCYVebEU+wZGxnQstGJhZPMvXsRhtqekILd5/w==", + "dev": true, + "dependencies": { + "http-equiv-refresh": "^1.0.0", + "list-to-array": "^1.1.0", + "parse-srcset": "^1.0.2", + "promise-each": "^2.2.0" + }, + "engines": { + "node": ">= 4" + } + }, "node_modules/postsvg": { "version": "2.2.7", "resolved": "https://registry.npmjs.org/postsvg/-/postsvg-2.2.7.tgz", @@ -3403,6 +5590,78 @@ "node": ">=0.8" } }, + "node_modules/prebuild-install": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", + "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", + "dev": true, + "peer": true, + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/prebuild-install/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "peer": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prebuild-install/node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dev": true, + "peer": true, + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/prebuild-install/node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "peer": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/pretty": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/pretty/-/pretty-2.0.0.tgz", @@ -3435,6 +5694,24 @@ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", "dev": true }, + "node_modules/promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dev": true, + "dependencies": { + "asap": "~2.0.3" + } + }, + "node_modules/promise-each": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/promise-each/-/promise-each-2.2.0.tgz", + "integrity": "sha512-67roqt1k3QDA41DZ8xi0V+rF3GoaMiX7QilbXu0vXimut+9RcKBNZ/t60xCRgcsihmNUsEjh48xLfNqOrKblUg==", + "dev": true, + "dependencies": { + "any-promise": "^0.1.0" + } + }, "node_modules/proto-list": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", @@ -3453,6 +5730,141 @@ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", "dev": true }, + "node_modules/pug": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.2.tgz", + "integrity": "sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw==", + "dev": true, + "dependencies": { + "pug-code-gen": "^3.0.2", + "pug-filters": "^4.0.0", + "pug-lexer": "^5.0.1", + "pug-linker": "^4.0.0", + "pug-load": "^3.0.0", + "pug-parser": "^6.0.0", + "pug-runtime": "^3.0.1", + "pug-strip-comments": "^2.0.0" + } + }, + "node_modules/pug-attrs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", + "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", + "dev": true, + "dependencies": { + "constantinople": "^4.0.1", + "js-stringify": "^1.0.2", + "pug-runtime": "^3.0.0" + } + }, + "node_modules/pug-code-gen": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.2.tgz", + "integrity": "sha512-nJMhW16MbiGRiyR4miDTQMRWDgKplnHyeLvioEJYbk1RsPI3FuA3saEP8uwnTb2nTJEKBU90NFVWJBk4OU5qyg==", + "dev": true, + "dependencies": { + "constantinople": "^4.0.1", + "doctypes": "^1.1.0", + "js-stringify": "^1.0.2", + "pug-attrs": "^3.0.0", + "pug-error": "^2.0.0", + "pug-runtime": "^3.0.0", + "void-elements": "^3.1.0", + "with": "^7.0.0" + } + }, + "node_modules/pug-error": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.0.0.tgz", + "integrity": "sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ==", + "dev": true + }, + "node_modules/pug-filters": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", + "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", + "dev": true, + "dependencies": { + "constantinople": "^4.0.1", + "jstransformer": "1.0.0", + "pug-error": "^2.0.0", + "pug-walk": "^2.0.0", + "resolve": "^1.15.1" + } + }, + "node_modules/pug-lexer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", + "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", + "dev": true, + "dependencies": { + "character-parser": "^2.2.0", + "is-expression": "^4.0.0", + "pug-error": "^2.0.0" + } + }, + "node_modules/pug-linker": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", + "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", + "dev": true, + "dependencies": { + "pug-error": "^2.0.0", + "pug-walk": "^2.0.0" + } + }, + "node_modules/pug-load": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", + "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", + "dev": true, + "dependencies": { + "object-assign": "^4.1.1", + "pug-walk": "^2.0.0" + } + }, + "node_modules/pug-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", + "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", + "dev": true, + "dependencies": { + "pug-error": "^2.0.0", + "token-stream": "1.0.0" + } + }, + "node_modules/pug-runtime": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", + "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==", + "dev": true + }, + "node_modules/pug-strip-comments": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", + "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", + "dev": true, + "dependencies": { + "pug-error": "^2.0.0" + } + }, + "node_modules/pug-walk": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", + "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "peer": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "node_modules/punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -3543,6 +5955,43 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/queue": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "dev": true, + "peer": true, + "dependencies": { + "inherits": "~2.0.3" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/queue-tick": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", + "dev": true, + "peer": true + }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -3567,6 +6016,22 @@ "node": ">= 0.8" } }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "peer": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, "node_modules/readable-stream": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", @@ -3594,6 +6059,53 @@ "node": ">=8.10.0" } }, + "node_modules/recursive-copy": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/recursive-copy/-/recursive-copy-2.0.14.tgz", + "integrity": "sha512-K8WNY8f8naTpfbA+RaXmkaQuD1IeW9EgNEfyGxSqqTQukpVtoOKros9jUqbpEsSw59YOmpd8nCBgtqJZy5nvog==", + "dev": true, + "dependencies": { + "errno": "^0.1.2", + "graceful-fs": "^4.1.4", + "junk": "^1.0.1", + "maximatch": "^0.1.0", + "mkdirp": "^0.5.1", + "pify": "^2.3.0", + "promise": "^7.0.1", + "rimraf": "^2.7.1", + "slash": "^1.0.0" + } + }, + "node_modules/recursive-copy/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/recursive-copy/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true + }, "node_modules/regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", @@ -3652,6 +6164,23 @@ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", "dev": true }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", @@ -3681,6 +6210,55 @@ "node": ">=0.12" } }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "peer": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, "node_modules/rx": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", @@ -3731,6 +6309,31 @@ "integrity": "sha512-fTMKDwtbvO5tldky9QZ2fMX7slR0mYpY5nbnFWYp0fOzDhHqhgIw9KoYgxLWsoNTS9ZHGauHj18DTyEw6BK3Og==", "dev": true }, + "node_modules/section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/section-matter/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/semver": { "version": "5.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", @@ -3740,6 +6343,12 @@ "semver": "bin/semver" } }, + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", + "dev": true + }, "node_modules/send": { "version": "0.16.2", "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", @@ -3881,6 +6490,22 @@ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true }, + "node_modules/set-function-length": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.0.tgz", + "integrity": "sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.1", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.2", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/set-value": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", @@ -3914,6 +6539,80 @@ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "dev": true }, + "node_modules/sharp": { + "version": "0.32.6", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.32.6.tgz", + "integrity": "sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==", + "dev": true, + "hasInstallScript": true, + "peer": true, + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.2", + "node-addon-api": "^6.1.0", + "prebuild-install": "^7.1.1", + "semver": "^7.5.4", + "simple-get": "^4.0.1", + "tar-fs": "^3.0.4", + "tunnel-agent": "^0.6.0" + }, + "engines": { + "node": ">=14.15.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/sharp/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "peer": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sharp/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "peer": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/shellwords": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", @@ -3926,6 +6625,81 @@ "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", "dev": true }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peer": true + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peer": true, + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dev": true, + "peer": true, + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/slugify": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.6.tgz", + "integrity": "sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", @@ -4189,6 +6963,15 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-js": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", @@ -4238,6 +7021,24 @@ "node": ">=0.10.0" } }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", @@ -4288,6 +7089,17 @@ "node": ">= 0.10.0" } }, + "node_modules/streamx": { + "version": "2.15.6", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.6.tgz", + "integrity": "sha512-q+vQL4AAz+FdfT137VF69Cc/APqUbxy+MDOImRrMvchJpigHj9GksgDU2LYbO9rx7RX6osWgxJB2WxhYv4SZAw==", + "dev": true, + "peer": true, + "dependencies": { + "fast-fifo": "^1.1.0", + "queue-tick": "^1.0.1" + } + }, "node_modules/strict-uri-encode": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", @@ -4341,6 +7153,25 @@ "node": ">=8" } }, + "node_modules/strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -4353,6 +7184,18 @@ "node": ">=8" } }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/svg-mixer": { "version": "2.3.14", "resolved": "https://registry.npmjs.org/svg-mixer/-/svg-mixer-2.3.14.tgz", @@ -4550,6 +7393,30 @@ "path-to-regexp": "^6.2.1" } }, + "node_modules/tar-fs": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.4.tgz", + "integrity": "sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==", + "dev": true, + "peer": true, + "dependencies": { + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^3.1.5" + } + }, + "node_modules/tar-stream": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.6.tgz", + "integrity": "sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==", + "dev": true, + "peer": true, + "dependencies": { + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } + }, "node_modules/tiny-glob": { "version": "0.2.9", "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", @@ -4560,6 +7427,15 @@ "globrex": "^0.1.2" } }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/to-object-path": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", @@ -4621,12 +7497,56 @@ "node": ">=0.6" } }, + "node_modules/token-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", + "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==", + "dev": true + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true, + "peer": true + }, "node_modules/traverse": { "version": "0.6.6", "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=", "dev": true }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "peer": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/twig": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/twig/-/twig-1.17.1.tgz", + "integrity": "sha512-atxccyr/BHtb1gPMA7Lvki0OuU17XBqHsNH9lzDHt9Rr1293EVZOosSZabEXz/DPVikIW8ZDqSkEddwyJnQN2w==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4", + "locutus": "^2.0.11", + "minimatch": "3.0.x", + "walk": "2.3.x" + }, + "bin": { + "twigjs": "bin/twigjs" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/typed-query-selector": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.11.0.tgz", @@ -4651,6 +7571,25 @@ "node": "*" } }, + "node_modules/uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", + "dev": true + }, + "node_modules/uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "dev": true, + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/unidecode": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/unidecode/-/unidecode-0.1.8.tgz", @@ -4831,6 +7770,42 @@ "node": ">= 0.8" } }, + "node_modules/void-elements": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", + "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/walk": { + "version": "2.3.15", + "resolved": "https://registry.npmjs.org/walk/-/walk-2.3.15.tgz", + "integrity": "sha512-4eRTBZljBfIISK1Vnt69Gvr2w/wc3U6Vtrw7qiN5iqYJPH7LElcYh/iU4XWhdCy2dZqv1ToMyYlybDylfG/5Vg==", + "dev": true, + "dependencies": { + "foreachasync": "^3.0.0" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true, + "peer": true + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "peer": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -4852,6 +7827,27 @@ "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", "dev": true }, + "node_modules/with": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", + "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.9.6", + "@babel/types": "^7.9.6", + "assert-never": "^1.2.1", + "babel-walk": "3.0.0-canary-5" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -4963,6 +7959,464 @@ } }, "dependencies": { + "@11ty/dependency-tree": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@11ty/dependency-tree/-/dependency-tree-2.0.1.tgz", + "integrity": "sha512-5R+DsT9LJ9tXiSQ4y+KLFppCkQyXhzAm1AIuBWE/sbU0hSXY5pkhoqQYEcPJQFg/nglL+wD55iv2j+7O96UAvg==", + "dev": true + }, + "@11ty/eleventy": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@11ty/eleventy/-/eleventy-2.0.1.tgz", + "integrity": "sha512-t8XVUbCJByhVEa1RzO0zS2QzbL3wPY8ot1yUw9noqiSHxJWUwv6jiwm1/MZDPTYtkZH2ZHvdQIRQ5/SjG9XmLw==", + "dev": true, + "requires": { + "@11ty/dependency-tree": "^2.0.1", + "@11ty/eleventy-dev-server": "^1.0.4", + "@11ty/eleventy-utils": "^1.0.1", + "@11ty/lodash-custom": "^4.17.21", + "@iarna/toml": "^2.2.5", + "@sindresorhus/slugify": "^1.1.2", + "bcp-47-normalize": "^1.1.1", + "chokidar": "^3.5.3", + "cross-spawn": "^7.0.3", + "debug": "^4.3.4", + "dependency-graph": "^0.11.0", + "ejs": "^3.1.9", + "fast-glob": "^3.2.12", + "graceful-fs": "^4.2.11", + "gray-matter": "^4.0.3", + "hamljs": "^0.6.2", + "handlebars": "^4.7.7", + "is-glob": "^4.0.3", + "iso-639-1": "^2.1.15", + "kleur": "^4.1.5", + "liquidjs": "^10.7.0", + "luxon": "^3.3.0", + "markdown-it": "^13.0.1", + "micromatch": "^4.0.5", + "minimist": "^1.2.8", + "moo": "^0.5.2", + "multimatch": "^5.0.0", + "mustache": "^4.2.0", + "normalize-path": "^3.0.0", + "nunjucks": "^3.2.3", + "path-to-regexp": "^6.2.1", + "please-upgrade-node": "^3.2.0", + "posthtml": "^0.16.6", + "posthtml-urls": "^1.0.0", + "pug": "^3.0.2", + "recursive-copy": "^2.0.14", + "semver": "^7.3.8", + "slugify": "^1.6.6" + }, + "dependencies": { + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "dependencies": { + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + } + } + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + }, + "domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "dev": true + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "htmlparser2": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", + "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.2", + "domutils": "^2.8.0", + "entities": "^3.0.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "posthtml": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.16.6.tgz", + "integrity": "sha512-JcEmHlyLK/o0uGAlj65vgg+7LIms0xKXe60lcDOTU7oVX/3LuEuLwrQpW3VJ7de5TaFKiW4kWkaIpJL42FEgxQ==", + "dev": true, + "requires": { + "posthtml-parser": "^0.11.0", + "posthtml-render": "^3.0.0" + } + }, + "posthtml-parser": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.11.0.tgz", + "integrity": "sha512-QecJtfLekJbWVo/dMAA+OSwY79wpRmbqS5TeXvXSX+f0c6pW4/SE6inzZ2qkU7oAMCPqIDkZDvd/bQsSFUnKyw==", + "dev": true, + "requires": { + "htmlparser2": "^7.1.1" + } + }, + "posthtml-render": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-3.0.0.tgz", + "integrity": "sha512-z+16RoxK3fUPgwaIgH9NGnK1HKY9XIDpydky5eQGgAFVXTCSezalv9U2jQuNV+Z9qV1fDWNzldcw4eK0SSbqKA==", + "dev": true, + "requires": { + "is-json": "^2.0.1" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "@11ty/eleventy-dev-server": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@11ty/eleventy-dev-server/-/eleventy-dev-server-1.0.4.tgz", + "integrity": "sha512-qVBmV2G1KF/0o5B/3fITlrrDHy4bONUI2YuN3/WJ3BNw4NU1d/we8XhKrlgq13nNvHoBx5czYp3LZt8qRG53Fg==", + "dev": true, + "requires": { + "@11ty/eleventy-utils": "^1.0.1", + "chokidar": "^3.5.3", + "debug": "^4.3.4", + "dev-ip": "^1.0.1", + "finalhandler": "^1.2.0", + "mime": "^3.0.0", + "minimist": "^1.2.8", + "morphdom": "^2.7.0", + "please-upgrade-node": "^3.2.0", + "ssri": "^8.0.1", + "ws": "^8.13.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + }, + "ws": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", + "dev": true, + "requires": {} + } + } + }, + "@11ty/eleventy-fetch": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@11ty/eleventy-fetch/-/eleventy-fetch-4.0.0.tgz", + "integrity": "sha512-wGAd0r+8DUWr22fK5r07dOKuNY6ltA7hX+sJzngGZL1yJmuUVdM/xPQZ+iq0BFgf/ZeRdpVEzf2D0cpVZUuiTg==", + "dev": true, + "peer": true, + "requires": { + "debug": "^4.3.4", + "flat-cache": "^3.0.4", + "node-fetch": "^2.6.7", + "p-queue": "^6.6.2" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "peer": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true, + "peer": true + } + } + }, + "@11ty/eleventy-img": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/@11ty/eleventy-img/-/eleventy-img-3.1.8.tgz", + "integrity": "sha512-9xVqbykggQAHTSiZEo6nUayS8l8nkM7RU8dCjGzikCc8FXSW/E17ytq7SaDngo24D3LZdD+3Gheh4zSeidrImA==", + "dev": true, + "peer": true, + "requires": { + "@11ty/eleventy-fetch": "^4.0.0", + "brotli-size": "^4.0.0", + "debug": "^4.3.4", + "entities": "^4.5.0", + "image-size": "^1.0.2", + "p-queue": "^6.6.2", + "sharp": "^0.32.6" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "peer": true, + "requires": { + "ms": "2.1.2" + } + }, + "entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "peer": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true, + "peer": true + } + } + }, + "@11ty/eleventy-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@11ty/eleventy-utils/-/eleventy-utils-1.0.2.tgz", + "integrity": "sha512-Zy2leMK1DQR6Q6ZPSagv7QpJaAz9uVbb+RmVetYFp3foMeQtOSZx7w2u5daRFmP+PeNq9vO9H4xtBToYFWZwHA==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0" + }, + "dependencies": { + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + } + } + }, + "@11ty/lodash-custom": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@11ty/lodash-custom/-/lodash-custom-4.17.21.tgz", + "integrity": "sha512-Mqt6im1xpb1Ykn3nbcCovWXK3ggywRJa+IXIdoz4wIIK+cvozADH63lexcuPpGS/gJ6/m2JxyyXDyupkMr5DHw==", + "dev": true + }, + "@babel/helper-string-parser": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true + }, + "@babel/parser": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", + "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", + "dev": true + }, + "@babel/runtime": { + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.8.tgz", + "integrity": "sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.14.0" + } + }, + "@babel/types": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", + "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + } + }, "@esbuild/android-arm": { "version": "0.17.6", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.6.tgz", @@ -5117,6 +8571,83 @@ "dev": true, "optional": true }, + "@factorial/eleventy-plugin-twig": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@factorial/eleventy-plugin-twig/-/eleventy-plugin-twig-0.1.2.tgz", + "integrity": "sha512-/wAJBrwkd+HtkfxRpYhUff1sRZHzkTUVf1xyFVZjoreLfSXXK+lJVbopC6YhZEcz/pA/BbMITd4TD6E9j45lyg==", + "dev": true, + "requires": { + "@11ty/eleventy-utils": "^1.0.1" + } + }, + "@iarna/toml": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", + "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==", + "dev": true + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@sindresorhus/slugify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@sindresorhus/slugify/-/slugify-1.1.2.tgz", + "integrity": "sha512-V9nR/W0Xd9TSGXpZ4iFUcFGhuOJtZX82Fzxj1YISlbSgKvIiNa7eLEZrT0vAraPOt++KHauIVNYgGRgjc13dXA==", + "dev": true, + "requires": { + "@sindresorhus/transliterate": "^0.1.1", + "escape-string-regexp": "^4.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + } + } + }, + "@sindresorhus/transliterate": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@sindresorhus/transliterate/-/transliterate-0.1.2.tgz", + "integrity": "sha512-5/kmIOY9FF32nicXH+5yLNTX4NJ4atl7jRgqAJuIn/iyDFXBktOKDxCvyGE/EzmF4ngSUvjXxQUQlQiZ5lfw+w==", + "dev": true, + "requires": { + "escape-string-regexp": "^2.0.0", + "lodash.deburr": "^4.1.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + } + } + }, "@socket.io/component-emitter": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", @@ -5159,12 +8690,24 @@ "@types/node": "*" } }, + "@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, "@types/node": { "version": "18.13.0", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.13.0.tgz", "integrity": "sha512-gC3TazRzGoOnoKAhUx+Q0t8S9Tzs74z7m0ipwGpSqQrleP14hKxP4/JUeEQcD3W1/aIpnWl8pHowI7WokuZpXg==", "dev": true }, + "a-sync-waterfall": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz", + "integrity": "sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==", + "dev": true + }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -5181,6 +8724,12 @@ "negotiator": "0.6.3" } }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -5202,6 +8751,12 @@ "color-convert": "^2.0.1" } }, + "any-promise": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-0.1.0.tgz", + "integrity": "sha512-lqzY9o+BbeGHRCOyxQkt/Tgvz0IZhTmQiA+LxQW8wSNpcTbj8K+0cZiSEvbpNZZP9/11Gy7dnLO3GNWUXO4d1g==", + "dev": true + }, "anymatch": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", @@ -5212,6 +8767,15 @@ "normalize-path": "^2.1.1" } }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, "arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", @@ -5230,12 +8794,48 @@ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "dev": true }, + "array-differ": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", + "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "dev": true + }, "array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, + "arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true + }, + "assert-never": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.2.1.tgz", + "integrity": "sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw==", + "dev": true + }, "assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", @@ -5277,6 +8877,22 @@ "postcss-value-parser": "^4.2.0" } }, + "b4a": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz", + "integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==", + "dev": true, + "peer": true + }, + "babel-walk": { + "version": "3.0.0-canary-5", + "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", + "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", + "dev": true, + "requires": { + "@babel/types": "^7.9.6" + } + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -5338,6 +8954,13 @@ } } }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "peer": true + }, "base64id": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", @@ -5350,12 +8973,65 @@ "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", "dev": true }, + "bcp-47": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/bcp-47/-/bcp-47-1.0.8.tgz", + "integrity": "sha512-Y9y1QNBBtYtv7hcmoX0tR+tUNSFZGZ6OL6vKPObq8BbOhkCoyayF6ogfLTgAli/KuAEbsYHYUNq2AQuY6IuLag==", + "dev": true, + "requires": { + "is-alphabetical": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0" + } + }, + "bcp-47-match": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bcp-47-match/-/bcp-47-match-1.0.3.tgz", + "integrity": "sha512-LggQ4YTdjWQSKELZF5JwchnBa1u0pIQSZf5lSdOHEdbVP55h0qICA/FUp3+W99q0xqxYa1ZQizTUH87gecII5w==", + "dev": true + }, + "bcp-47-normalize": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/bcp-47-normalize/-/bcp-47-normalize-1.1.1.tgz", + "integrity": "sha512-jWZ1Jdu3cs0EZdfCkS0UE9Gg01PtxnChjEBySeB+Zo6nkqtFfnvtoQQgP1qU1Oo4qgJgxhTI6Sf9y/pZIhPs0A==", + "dev": true, + "requires": { + "bcp-47": "^1.0.0", + "bcp-47-match": "^1.0.0" + } + }, "binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "peer": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "peer": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -5395,6 +9071,16 @@ } } }, + "brotli-size": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/brotli-size/-/brotli-size-4.0.0.tgz", + "integrity": "sha512-uA9fOtlTRC0iqKfzff1W34DXUA3GyVqbUaeo3Rw3d4gd1eavKVCETXrn3NzO74W+UVkG3UHu8WxUi+XvKI/huA==", + "dev": true, + "peer": true, + "requires": { + "duplexer": "0.1.1" + } + }, "browser-sync": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-3.0.2.tgz", @@ -5552,6 +9238,17 @@ "integrity": "sha512-BXvDkqhDNxXEjeGM8LFkSbR+jzmP/CYpCiVKYn+soB1dDldeU15EBNDkwVXndKuX35wnNUaPd0qSoQEAkmQtMw==", "dev": true }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "peer": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, "bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -5575,6 +9272,17 @@ "unset-value": "^1.0.0" } }, + "call-bind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "dev": true, + "requires": { + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" + } + }, "camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", @@ -5597,6 +9305,15 @@ "supports-color": "^7.1.0" } }, + "character-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", + "integrity": "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==", + "dev": true, + "requires": { + "is-regex": "^1.0.3" + } + }, "chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -5664,6 +9381,13 @@ } } }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true, + "peer": true + }, "class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", @@ -5727,6 +9451,17 @@ "object-visit": "^1.0.0" } }, + "color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "dev": true, + "peer": true, + "requires": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + } + }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -5742,6 +9477,17 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dev": true, + "peer": true, + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, "commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -5828,6 +9574,16 @@ "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", "dev": true }, + "constantinople": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", + "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", + "dev": true, + "requires": { + "@babel/parser": "^7.6.0", + "@babel/types": "^7.6.1" + } + }, "cookie": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", @@ -5856,6 +9612,17 @@ "vary": "^1" } }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, "cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -5883,12 +9650,40 @@ "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", "dev": true }, + "decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "peer": true, + "requires": { + "mimic-response": "^3.1.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "peer": true + }, "deepmerge": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==", "dev": true }, + "define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + } + }, "define-property": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", @@ -5944,18 +9739,37 @@ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", "dev": true }, + "dependency-graph": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", + "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", + "dev": true + }, "destroy": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==", "dev": true }, + "detect-libc": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", + "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", + "dev": true, + "peer": true + }, "dev-ip": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz", "integrity": "sha512-LmVkry/oDShEgSZPNgqCIp2/TlqtExeGmymru3uCELnfyjY11IzpAproLYs+1X88fXO6DBoYP3ul2Xo2yz2j6A==", "dev": true }, + "doctypes": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", + "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==", + "dev": true + }, "dom-serializer": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", @@ -5991,6 +9805,13 @@ "domelementtype": "1" } }, + "duplexer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha512-sxNZ+ljy+RA1maXoUReeqBBpBC6RLKmg5ewzV+x+mSETmWNoKdZN6vcQjpFROemza23hGFskJtFNoUWUaQ+R4Q==", + "dev": true, + "peer": true + }, "easy-extender": { "version": "2.3.4", "resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.4.tgz", @@ -6027,6 +9848,15 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "dev": true }, + "ejs": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", + "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", + "dev": true, + "requires": { + "jake": "^10.8.5" + } + }, "electron-to-chromium": { "version": "1.4.272", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.272.tgz", @@ -6045,6 +9875,16 @@ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "dev": true }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "peer": true, + "requires": { + "once": "^1.4.0" + } + }, "engine.io": { "version": "6.4.2", "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.4.2.tgz", @@ -6185,6 +10025,12 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, "etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", @@ -6232,6 +10078,13 @@ } } }, + "expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "dev": true, + "peer": true + }, "extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", @@ -6324,12 +10177,115 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, + "fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "dev": true, + "peer": true + }, + "fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "dependencies": { + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, + "fastq": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", + "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "requires": { + "minimatch": "^5.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", @@ -6378,6 +10334,25 @@ "path-exists": "^4.0.0" } }, + "flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "peer": true, + "requires": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "dev": true, + "peer": true + }, "follow-redirects": { "version": "1.15.2", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", @@ -6390,6 +10365,12 @@ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true }, + "foreachasync": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/foreachasync/-/foreachasync-3.0.0.tgz", + "integrity": "sha512-J+ler7Ta54FwwNcx6wQRDhTIbNeyDcARMkOcguEqnEdtm0jKvN3Li3PDAb2Du3ubJYEWfYL83XMROXdsXAXycw==", + "dev": true + }, "fraction.js": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", @@ -6411,6 +10392,13 @@ "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "dev": true }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true, + "peer": true + }, "fs-extra": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", @@ -6435,18 +10423,43 @@ "dev": true, "optional": true }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true + }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, + "get-intrinsic": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "dev": true, + "requires": { + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + } + }, "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", "dev": true }, + "github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "dev": true, + "peer": true + }, "glob": { "version": "7.1.4", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", @@ -6492,24 +10505,94 @@ "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", "dev": true }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3" + } + }, "graceful-fs": { - "version": "4.2.9", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, + "gray-matter": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", + "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", + "dev": true, + "requires": { + "js-yaml": "^3.13.1", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" + } + }, "growly": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", "dev": true }, + "hamljs": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/hamljs/-/hamljs-0.6.2.tgz", + "integrity": "sha512-/chXRp4WpL47I+HX1vCCdSbEXAljEG2FBMmgO7Am0bYsqgnEjreeWzUdX1onXqwZtcfgxbCg5WtEYYvuZ5muBg==", + "dev": true + }, + "handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" + } + }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.2" + } + }, + "has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", @@ -6542,6 +10625,15 @@ } } }, + "hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dev": true, + "requires": { + "function-bind": "^1.1.2" + } + }, "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -6575,6 +10667,12 @@ } } }, + "http-equiv-refresh": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/http-equiv-refresh/-/http-equiv-refresh-1.0.0.tgz", + "integrity": "sha512-TScO04soylRN9i/QdOdgZyhydXg9z6XdaGzEyOgDKycePeDeTT4KvigjBcI+tgfTlieLWauGORMq5F1eIDa+1w==", + "dev": true + }, "http-errors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", @@ -6622,6 +10720,23 @@ "safer-buffer": ">= 2.1.2 < 3" } }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "peer": true + }, + "image-size": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.1.1.tgz", + "integrity": "sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ==", + "dev": true, + "peer": true, + "requires": { + "queue": "6.0.2" + } + }, "immutable": { "version": "3.8.2", "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", @@ -6670,6 +10785,29 @@ } } }, + "is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "dev": true + }, + "is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "dev": true, + "requires": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + } + }, + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "dev": true, + "peer": true + }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -6685,6 +10823,15 @@ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, + "is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "requires": { + "hasown": "^2.0.0" + } + }, "is-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", @@ -6705,6 +10852,12 @@ } } }, + "is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "dev": true + }, "is-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", @@ -6730,6 +10883,16 @@ "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", "dev": true }, + "is-expression": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", + "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", + "dev": true, + "requires": { + "acorn": "^7.1.1", + "object-assign": "^4.1.1" + } + }, "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", @@ -6757,6 +10920,12 @@ "is-extglob": "^2.1.1" } }, + "is-json": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-json/-/is-json-2.0.1.tgz", + "integrity": "sha512-6BEnpVn1rcf3ngfmViLM6vjUjGErbdrL4rwlv+u1NO1XO8kqT4YGL8+19Q+Z/bas8tY90BTWMk2+fW1g6hQjbA==", + "dev": true + }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -6801,6 +10970,22 @@ "isobject": "^3.0.1" } }, + "is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", + "dev": true + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, "is-whitespace": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/is-whitespace/-/is-whitespace-0.3.0.tgz", @@ -6831,12 +11016,47 @@ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, + "iso-639-1": { + "version": "2.1.15", + "resolved": "https://registry.npmjs.org/iso-639-1/-/iso-639-1-2.1.15.tgz", + "integrity": "sha512-7c7mBznZu2ktfvyT582E2msM+Udc1EjOyhVRE/0ZsjD9LBtWSm23h3PtiRh2a35XoUsTQQjJXaJzuLjXsOdFDg==", + "dev": true + }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, + "jake": { + "version": "10.8.7", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", + "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", + "dev": true, + "requires": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "dependencies": { + "async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, "js-beautify": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.13.0.tgz", @@ -6850,6 +11070,29 @@ "nopt": "^5.0.0" } }, + "js-stringify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", + "integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==", + "dev": true + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "peer": true + }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -6865,6 +11108,32 @@ "graceful-fs": "^4.1.6" } }, + "jstransformer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", + "integrity": "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==", + "dev": true, + "requires": { + "is-promise": "^2.0.0", + "promise": "^7.0.1" + } + }, + "junk": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/junk/-/junk-1.0.3.tgz", + "integrity": "sha512-3KF80UaaSSxo8jVnRYtMKNGFOoVPBdkkVPsw+Ad0y4oxKXPduS6G6iHkrf69yJVff/VAaYXkV42rtZ7daJxU3w==", + "dev": true + }, + "keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "peer": true, + "requires": { + "json-buffer": "3.0.1" + } + }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -6883,6 +11152,38 @@ "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==", "dev": true }, + "linkify-it": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-4.0.1.tgz", + "integrity": "sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==", + "dev": true, + "requires": { + "uc.micro": "^1.0.1" + } + }, + "liquidjs": { + "version": "10.10.0", + "resolved": "https://registry.npmjs.org/liquidjs/-/liquidjs-10.10.0.tgz", + "integrity": "sha512-f4gPvCq4uV4Fm5YezVUQoAMPmBMEuIE2LvgCnzyWoPRx+ZefH6b8DU2eb7znltRqATHF8zYvOsd5FD2z1spJgg==", + "dev": true, + "requires": { + "commander": "^10.0.0" + }, + "dependencies": { + "commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true + } + } + }, + "list-to-array": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/list-to-array/-/list-to-array-1.1.0.tgz", + "integrity": "sha512-+dAZZ2mM+/m+vY9ezfoueVvrgnHIGi5FvgSymbIgJOFwiznWyA59mav95L+Mc6xPtL3s9gm5eNTlNtxJLbNM1g==", + "dev": true + }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -6900,12 +11201,24 @@ "@studio-freight/lenis": "1.0.27" } }, + "locutus": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/locutus/-/locutus-2.0.16.tgz", + "integrity": "sha512-pGfl6Hb/1mXLzrX5kl5lH7gz25ey0vwQssZp8Qo2CEF59di6KrAgdFm+0pW8ghLnvNzzJGj5tlWhhv2QbK3jeQ==", + "dev": true + }, "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, + "lodash.deburr": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/lodash.deburr/-/lodash.deburr-4.1.0.tgz", + "integrity": "sha512-m/M1U1f3ddMCs6Hq2tAsYThTBDaAKFDX3dwDo97GEYzamXi9SqUpjWi/Rrj/gf3X2n8ktwgZrlP1z6E3v/IExQ==", + "dev": true + }, "lodash.isfinite": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", @@ -6930,6 +11243,12 @@ } } }, + "luxon": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.4.tgz", + "integrity": "sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA==", + "dev": true + }, "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", @@ -6945,6 +11264,74 @@ "object-visit": "^1.0.0" } }, + "markdown-it": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.2.tgz", + "integrity": "sha512-FtwnEuuK+2yVU7goGn/MJ0WBZMM9ZPgU9spqlFs7/A/pDIUNSOQZhUgOqYCficIuR2QaFnrt8LHqBWsbTAoI5w==", + "dev": true, + "requires": { + "argparse": "^2.0.1", + "entities": "~3.0.1", + "linkify-it": "^4.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "dev": true + } + } + }, + "maximatch": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/maximatch/-/maximatch-0.1.0.tgz", + "integrity": "sha512-9ORVtDUFk4u/NFfo0vG/ND/z7UQCVZBL539YW0+U1I7H1BkZwizcPx5foFv7LCPcBnm2U6RjFnQOsIvN4/Vm2A==", + "dev": true, + "requires": { + "array-differ": "^1.0.0", + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "minimatch": "^3.0.0" + }, + "dependencies": { + "array-differ": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", + "integrity": "sha512-LeZY+DZDRnvP7eMuQ6LHfCzUGxAAIViUBliK24P3hWXL6y4SortgR6Nim6xrkfSLlmH0+k+9NYNwVC2s53ZrYQ==", + "dev": true + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true + } + } + }, + "mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", + "dev": true + }, "memory-fs": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", @@ -6964,6 +11351,12 @@ "is-plain-obj": "^1.1" } }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, "micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", @@ -7006,6 +11399,13 @@ "mime-db": "1.52.0" } }, + "mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "peer": true + }, "minimatch": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", @@ -7015,6 +11415,21 @@ "brace-expansion": "^1.1.7" } }, + "minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true + }, + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, "mitt": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.2.0.tgz", @@ -7048,6 +11463,13 @@ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true }, + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true, + "peer": true + }, "modujs": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/modujs/-/modujs-1.4.2.tgz", @@ -7058,12 +11480,43 @@ "resolved": "https://registry.npmjs.org/modularload/-/modularload-1.2.8.tgz", "integrity": "sha512-UKYB5nXTcv4DVkXJzwdp9vPw7QFfphkLc3Ka3MeFu9kw27SE/9MZivoHIvrtyUqa4Pt7Ss81h4siSI3dt+5xCQ==" }, + "moo": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.2.tgz", + "integrity": "sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==", + "dev": true + }, + "morphdom": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/morphdom/-/morphdom-2.7.2.tgz", + "integrity": "sha512-Dqb/lHFyTi7SZpY0a5R4I/0Edo+iPMbaUexsHHsLAByyixCDiLHPHyVoKVmrpL0THcT7V9Cgev9y21TQYq6wQg==", + "dev": true + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, + "multimatch": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", + "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", + "dev": true, + "requires": { + "@types/minimatch": "^3.0.3", + "array-differ": "^3.0.0", + "array-union": "^2.1.0", + "arrify": "^2.0.1", + "minimatch": "^3.0.4" + } + }, + "mustache": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", + "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", + "dev": true + }, "nanoid": { "version": "3.3.7", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", @@ -7089,12 +11542,74 @@ "to-regex": "^3.0.1" } }, + "napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", + "dev": true, + "peer": true + }, "negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node-abi": { + "version": "3.54.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.54.0.tgz", + "integrity": "sha512-p7eGEiQil0YUV3ItH4/tBb781L5impVmmx2E9FRKF7d18XXzp4PGT2tdYMFY6wQqgxD0IwNZOiSJ0/K0fSi/OA==", + "dev": true, + "peer": true, + "requires": { + "semver": "^7.3.5" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "peer": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "peer": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "node-addon-api": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", + "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", + "dev": true, + "peer": true + }, + "node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "peer": true, + "requires": { + "whatwg-url": "^5.0.0" + } + }, "node-notifier": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-10.0.1.tgz", @@ -7179,6 +11694,25 @@ "resolved": "https://registry.npmjs.org/normalize.css/-/normalize.css-8.0.1.tgz", "integrity": "sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==" }, + "nunjucks": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/nunjucks/-/nunjucks-3.2.4.tgz", + "integrity": "sha512-26XRV6BhkgK0VOxfbU5cQI+ICFUtMLixv1noZn1tGU38kQH5A5nmmbk/O45xdyBhD1esk47nKrY0mvQpZIhRjQ==", + "dev": true, + "requires": { + "a-sync-waterfall": "^1.0.0", + "asap": "^2.0.3", + "commander": "^5.1.0" + }, + "dependencies": { + "commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "dev": true + } + } + }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -7266,6 +11800,13 @@ "is-wsl": "^1.1.0" } }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "dev": true, + "peer": true + }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -7284,12 +11825,39 @@ "p-limit": "^2.2.0" } }, + "p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "dev": true, + "peer": true, + "requires": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + } + }, + "p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dev": true, + "peer": true, + "requires": { + "p-finally": "^1.0.0" + } + }, "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, + "parse-srcset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz", + "integrity": "sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==", + "dev": true + }, "parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -7314,6 +11882,18 @@ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, "path-to-regexp": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", @@ -7331,6 +11911,21 @@ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true + }, + "please-upgrade-node": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", + "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", + "dev": true, + "requires": { + "semver-compare": "^1.0.0" + } + }, "portscanner": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.2.0.tgz", @@ -7431,6 +12026,18 @@ "integrity": "sha512-W1779iVHGfq0Fvh2PROhCe2QhB8mEErgqzo1wpIt36tCgChafP+hbXIhLDOM8ePJrZcFs0vkNEtdibEWVqChqw==", "dev": true }, + "posthtml-urls": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/posthtml-urls/-/posthtml-urls-1.0.0.tgz", + "integrity": "sha512-CMJ0L009sGQVUuYM/g6WJdscsq6ooAwhUuF6CDlYPMLxKp2rmCYVebEU+wZGxnQstGJhZPMvXsRhtqekILd5/w==", + "dev": true, + "requires": { + "http-equiv-refresh": "^1.0.0", + "list-to-array": "^1.1.0", + "parse-srcset": "^1.0.2", + "promise-each": "^2.2.0" + } + }, "postsvg": { "version": "2.2.7", "resolved": "https://registry.npmjs.org/postsvg/-/postsvg-2.2.7.tgz", @@ -7453,6 +12060,68 @@ } } }, + "prebuild-install": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", + "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", + "dev": true, + "peer": true, + "requires": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "peer": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dev": true, + "peer": true, + "requires": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "peer": true, + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + } + } + } + }, "pretty": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/pretty/-/pretty-2.0.0.tgz", @@ -7481,6 +12150,24 @@ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", "dev": true }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dev": true, + "requires": { + "asap": "~2.0.3" + } + }, + "promise-each": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/promise-each/-/promise-each-2.2.0.tgz", + "integrity": "sha512-67roqt1k3QDA41DZ8xi0V+rF3GoaMiX7QilbXu0vXimut+9RcKBNZ/t60xCRgcsihmNUsEjh48xLfNqOrKblUg==", + "dev": true, + "requires": { + "any-promise": "^0.1.0" + } + }, "proto-list": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", @@ -7499,6 +12186,141 @@ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", "dev": true }, + "pug": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.2.tgz", + "integrity": "sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw==", + "dev": true, + "requires": { + "pug-code-gen": "^3.0.2", + "pug-filters": "^4.0.0", + "pug-lexer": "^5.0.1", + "pug-linker": "^4.0.0", + "pug-load": "^3.0.0", + "pug-parser": "^6.0.0", + "pug-runtime": "^3.0.1", + "pug-strip-comments": "^2.0.0" + } + }, + "pug-attrs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", + "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", + "dev": true, + "requires": { + "constantinople": "^4.0.1", + "js-stringify": "^1.0.2", + "pug-runtime": "^3.0.0" + } + }, + "pug-code-gen": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.2.tgz", + "integrity": "sha512-nJMhW16MbiGRiyR4miDTQMRWDgKplnHyeLvioEJYbk1RsPI3FuA3saEP8uwnTb2nTJEKBU90NFVWJBk4OU5qyg==", + "dev": true, + "requires": { + "constantinople": "^4.0.1", + "doctypes": "^1.1.0", + "js-stringify": "^1.0.2", + "pug-attrs": "^3.0.0", + "pug-error": "^2.0.0", + "pug-runtime": "^3.0.0", + "void-elements": "^3.1.0", + "with": "^7.0.0" + } + }, + "pug-error": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.0.0.tgz", + "integrity": "sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ==", + "dev": true + }, + "pug-filters": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", + "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", + "dev": true, + "requires": { + "constantinople": "^4.0.1", + "jstransformer": "1.0.0", + "pug-error": "^2.0.0", + "pug-walk": "^2.0.0", + "resolve": "^1.15.1" + } + }, + "pug-lexer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", + "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", + "dev": true, + "requires": { + "character-parser": "^2.2.0", + "is-expression": "^4.0.0", + "pug-error": "^2.0.0" + } + }, + "pug-linker": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", + "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", + "dev": true, + "requires": { + "pug-error": "^2.0.0", + "pug-walk": "^2.0.0" + } + }, + "pug-load": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", + "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", + "dev": true, + "requires": { + "object-assign": "^4.1.1", + "pug-walk": "^2.0.0" + } + }, + "pug-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", + "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", + "dev": true, + "requires": { + "pug-error": "^2.0.0", + "token-stream": "1.0.0" + } + }, + "pug-runtime": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", + "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==", + "dev": true + }, + "pug-strip-comments": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", + "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", + "dev": true, + "requires": { + "pug-error": "^2.0.0" + } + }, + "pug-walk": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", + "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==", + "dev": true + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "peer": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -7567,6 +12389,29 @@ "strict-uri-encode": "^2.0.0" } }, + "queue": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "dev": true, + "peer": true, + "requires": { + "inherits": "~2.0.3" + } + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "queue-tick": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", + "dev": true, + "peer": true + }, "range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -7585,6 +12430,19 @@ "unpipe": "1.0.0" } }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "peer": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, "readable-stream": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", @@ -7609,6 +12467,49 @@ "picomatch": "^2.2.1" } }, + "recursive-copy": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/recursive-copy/-/recursive-copy-2.0.14.tgz", + "integrity": "sha512-K8WNY8f8naTpfbA+RaXmkaQuD1IeW9EgNEfyGxSqqTQukpVtoOKros9jUqbpEsSw59YOmpd8nCBgtqJZy5nvog==", + "dev": true, + "requires": { + "errno": "^0.1.2", + "graceful-fs": "^4.1.4", + "junk": "^1.0.1", + "maximatch": "^0.1.0", + "mkdirp": "^0.5.1", + "pify": "^2.3.0", + "promise": "^7.0.1", + "rimraf": "^2.7.1", + "slash": "^1.0.0" + }, + "dependencies": { + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "requires": { + "minimist": "^1.2.6" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true + }, "regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", @@ -7655,6 +12556,17 @@ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", "dev": true }, + "resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "requires": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, "resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", @@ -7677,6 +12589,31 @@ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", "dev": true }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "peer": true, + "requires": { + "glob": "^7.1.3" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, "rx": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", @@ -7723,12 +12660,39 @@ } } }, + "section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, "semver": { "version": "5.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true }, + "semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", + "dev": true + }, "send": { "version": "0.16.2", "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", @@ -7853,6 +12817,19 @@ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true }, + "set-function-length": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.0.tgz", + "integrity": "sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==", + "dev": true, + "requires": { + "define-data-property": "^1.1.1", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.2", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.1" + } + }, "set-value": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", @@ -7882,6 +12859,60 @@ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "dev": true }, + "sharp": { + "version": "0.32.6", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.32.6.tgz", + "integrity": "sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==", + "dev": true, + "peer": true, + "requires": { + "color": "^4.2.3", + "detect-libc": "^2.0.2", + "node-addon-api": "^6.1.0", + "prebuild-install": "^7.1.1", + "semver": "^7.5.4", + "simple-get": "^4.0.1", + "tar-fs": "^3.0.4", + "tunnel-agent": "^0.6.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "peer": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "peer": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, "shellwords": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", @@ -7894,6 +12925,47 @@ "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", "dev": true }, + "simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "dev": true, + "peer": true + }, + "simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "dev": true, + "peer": true, + "requires": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dev": true, + "peer": true, + "requires": { + "is-arrayish": "^0.3.1" + } + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg==", + "dev": true + }, + "slugify": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.6.tgz", + "integrity": "sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==", + "dev": true + }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", @@ -8103,6 +13175,12 @@ } } }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, "source-map-js": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", @@ -8143,6 +13221,21 @@ "extend-shallow": "^3.0.0" } }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, + "requires": { + "minipass": "^3.1.1" + } + }, "static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", @@ -8180,6 +13273,17 @@ "limiter": "^1.0.5" } }, + "streamx": { + "version": "2.15.6", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.6.tgz", + "integrity": "sha512-q+vQL4AAz+FdfT137VF69Cc/APqUbxy+MDOImRrMvchJpigHj9GksgDU2LYbO9rx7RX6osWgxJB2WxhYv4SZAw==", + "dev": true, + "peer": true, + "requires": { + "fast-fifo": "^1.1.0", + "queue-tick": "^1.0.1" + } + }, "strict-uri-encode": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", @@ -8223,6 +13327,19 @@ } } }, + "strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", + "dev": true + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "peer": true + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -8232,6 +13349,12 @@ "has-flag": "^4.0.0" } }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, "svg-mixer": { "version": "2.3.14", "resolved": "https://registry.npmjs.org/svg-mixer/-/svg-mixer-2.3.14.tgz", @@ -8403,6 +13526,30 @@ "path-to-regexp": "^6.2.1" } }, + "tar-fs": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.4.tgz", + "integrity": "sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==", + "dev": true, + "peer": true, + "requires": { + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^3.1.5" + } + }, + "tar-stream": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.6.tgz", + "integrity": "sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==", + "dev": true, + "peer": true, + "requires": { + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } + }, "tiny-glob": { "version": "0.2.9", "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", @@ -8413,6 +13560,12 @@ "globrex": "^0.1.2" } }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true + }, "to-object-path": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", @@ -8461,12 +13614,47 @@ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true }, + "token-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", + "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==", + "dev": true + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true, + "peer": true + }, "traverse": { "version": "0.6.6", "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=", "dev": true }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "peer": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "twig": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/twig/-/twig-1.17.1.tgz", + "integrity": "sha512-atxccyr/BHtb1gPMA7Lvki0OuU17XBqHsNH9lzDHt9Rr1293EVZOosSZabEXz/DPVikIW8ZDqSkEddwyJnQN2w==", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4", + "locutus": "^2.0.11", + "minimatch": "3.0.x", + "walk": "2.3.x" + } + }, "typed-query-selector": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.11.0.tgz", @@ -8478,6 +13666,19 @@ "integrity": "sha512-RqshF7TPTE0XLYAqmjlu5cLLuGdKrNu9O1KLA/qp39QtbZwuzwv1dT46DZSopoUMsYgXpB3Cv8a03FI8b74oFQ==", "dev": true }, + "uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", + "dev": true + }, + "uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "dev": true, + "optional": true + }, "unidecode": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/unidecode/-/unidecode-0.1.8.tgz", @@ -8612,6 +13813,39 @@ "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "dev": true }, + "void-elements": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", + "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", + "dev": true + }, + "walk": { + "version": "2.3.15", + "resolved": "https://registry.npmjs.org/walk/-/walk-2.3.15.tgz", + "integrity": "sha512-4eRTBZljBfIISK1Vnt69Gvr2w/wc3U6Vtrw7qiN5iqYJPH7LElcYh/iU4XWhdCy2dZqv1ToMyYlybDylfG/5Vg==", + "dev": true, + "requires": { + "foreachasync": "^3.0.0" + } + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true, + "peer": true + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "peer": true, + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -8627,6 +13861,24 @@ "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", "dev": true }, + "with": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", + "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", + "dev": true, + "requires": { + "@babel/parser": "^7.9.6", + "@babel/types": "^7.9.6", + "assert-never": "^1.2.1", + "babel-walk": "3.0.0-canary-5" + } + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true + }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", diff --git a/package.json b/package.json index 57f9e57..358c317 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,10 @@ "purgecss": "^5.0.0", "sass": "^1.69.5", "svg-mixer": "~2.3.14", - "tiny-glob": "^0.2.9" + "tiny-glob": "^0.2.9", + "@11ty/eleventy": "^2.0.1", + "@factorial/eleventy-plugin-twig": "^0.1.2", + "twig": "^1.16.0" }, "overrides": { "browser-sync": { diff --git a/views/layouts/base.twig b/views/layouts/base.twig new file mode 100644 index 0000000..a6363ac --- /dev/null +++ b/views/layouts/base.twig @@ -0,0 +1,48 @@ + + + + + + + + {% if title %}{{ title }} | {% endif %}{{ metadata.title }} + + + + + + + + + + + + + + +
+ {% block beforeMain %} +
+ {% include "@partials/header.twig" %} + {% endblock %} + +
+ {% block content %}{% endblock %} + + {% block afterContent %} + {% include "@partials/footer.twig" %} + {% endblock %} +
+ + {% block afterMain %} +
+ {% endblock %} +
+ + + + + + + + diff --git a/views/partials/footer.twig b/views/partials/footer.twig new file mode 100644 index 0000000..6dfd379 --- /dev/null +++ b/views/partials/footer.twig @@ -0,0 +1,3 @@ + diff --git a/views/partials/header.twig b/views/partials/header.twig new file mode 100644 index 0000000..ef938c9 --- /dev/null +++ b/views/partials/header.twig @@ -0,0 +1,15 @@ +{% set _logo_tag = page.url == '/' ? 'h1' : 'span' %} + +
+ + <{{_logo_tag}} style="text-decoration: underline;">Locomotive Boilerplate + + +
diff --git a/views/templates/form.twig b/views/templates/form.twig new file mode 100644 index 0000000..6a85ccc --- /dev/null +++ b/views/templates/form.twig @@ -0,0 +1,61 @@ +{% extends "@layouts/base.twig" %} + +{% block content %} +
+

Page

+ +
+
+ +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+
+
+
+ + +
+
+ + +
+
+
+
+ +
+ +
+
+
+ + +
+ +
+ +
+
+
+{% endblock %} diff --git a/views/templates/grid.twig b/views/templates/grid.twig new file mode 100644 index 0000000..8fc2af6 --- /dev/null +++ b/views/templates/grid.twig @@ -0,0 +1,29 @@ +{% extends "@layouts/base.twig" %} + +{% block content %} +
+

Hello

+ +
+
+

This grid has 4 columns and 12 columns from `medium` MQ

+
+ +
+

Lorem, ipsum dolor sit amet consectetur adipisicing elit. Expedita provident distinctio deleniti eaque cumque doloremque aut quo dicta porro commodi, temporibus totam dolor autem tempore quasi ullam sed suscipit vero?

+
+ +
+

Lorem, ipsum dolor sit amet consectetur adipisicing elit. Expedita provident distinctio deleniti eaque cumque doloremque aut quo dicta porro commodi, temporibus totam dolor autem tempore quasi ullam sed suscipit vero?

+
+ +
+

Lorem, ipsum dolor sit amet consectetur adipisicing elit. Expedita provident distinctio deleniti eaque cumque doloremque aut quo dicta porro commodi, temporibus totam dolor autem tempore quasi ullam sed suscipit vero?

+
+ +
+

Lorem, ipsum dolor sit amet consectetur adipisicing elit. Expedita provident distinctio deleniti eaque cumque doloremque aut quo dicta porro commodi, temporibus totam dolor autem tempore quasi ullam sed suscipit vero?

+
+
+
+{% endblock %} diff --git a/views/templates/images.twig b/views/templates/images.twig new file mode 100644 index 0000000..a0a213d --- /dev/null +++ b/views/templates/images.twig @@ -0,0 +1,69 @@ +{% extends "@layouts/base.twig" %} + +{% block content %} +
+

Images

+ +
+

Relative to scroll

+ +

Using o-ratio & img

+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +

Using o-ratio & background-image

+ +
+
+
+
+
+
+
+ +

Using SVG viewport for ratio

+ +
+ + + + + +
+
+
+{% endblock %} diff --git a/views/templates/index.twig b/views/templates/index.twig new file mode 100644 index 0000000..cf0de71 --- /dev/null +++ b/views/templates/index.twig @@ -0,0 +1,11 @@ +--- +title: Home +--- + +{% extends "@layouts/base.twig" %} + +{% block content %} +
+

Hello world!

+
+{% endblock %} diff --git a/views/templates/project.twig b/views/templates/project.twig new file mode 100644 index 0000000..bfd5112 --- /dev/null +++ b/views/templates/project.twig @@ -0,0 +1,26 @@ +--- +pagination: + data: projects + size: 1 + alias: project +permalink: "project/{{ project.title | slug }}/index.html" +--- + +{% extends "@layouts/base.twig" %} + +{% block content %} +
+
+

{{project.title}}

+

{{project.desc}}

+ + {% if pagination.page.previous %} + ← {{pagination.page.previous.title}} + {% endif %} + {% if pagination.page.next %} + {{pagination.page.next.title}} → + {% endif %} +
+
+
+{% endblock %} diff --git a/views/templates/projects.twig b/views/templates/projects.twig new file mode 100644 index 0000000..1597101 --- /dev/null +++ b/views/templates/projects.twig @@ -0,0 +1,42 @@ +--- +pagination: + data: projects + size: 4 +--- + +{% extends "@layouts/base.twig" %} + +{% block beforeMain %} + + Close + + +
+ {% include "@partials/header.twig" %} +{% endblock %} + +{% block content %} +
+

Projects

+ +
+ + +
    + {% for pageEntry in pagination.pages %} + {% if page.url == pagination.hrefs[ loop.index0 ] %} + {{ loop.index }} + {% else %} + {{ loop.index }} + {% endif %} + {% endfor %} +
+
+
+ + +{% endblock %} diff --git a/www/assets/scripts/app.js b/www/assets/scripts/app.js index c1ab674..17df0c7 100644 --- a/www/assets/scripts/app.js +++ b/www/assets/scripts/app.js @@ -1,3117 +1,7 @@ -(() => { - var __create = Object.create; - var __defProp = Object.defineProperty; - var __getOwnPropDesc = Object.getOwnPropertyDescriptor; - var __getOwnPropNames = Object.getOwnPropertyNames; - var __getOwnPropSymbols = Object.getOwnPropertySymbols; - var __getProtoOf = Object.getPrototypeOf; - var __hasOwnProp = Object.prototype.hasOwnProperty; - var __propIsEnum = Object.prototype.propertyIsEnumerable; - var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; - var __spreadValues = (a4, b3) => { - for (var prop in b3 || (b3 = {})) - if (__hasOwnProp.call(b3, prop)) - __defNormalProp(a4, prop, b3[prop]); - if (__getOwnPropSymbols) - for (var prop of __getOwnPropSymbols(b3)) { - if (__propIsEnum.call(b3, prop)) - __defNormalProp(a4, prop, b3[prop]); - } - return a4; - }; - var __objRest = (source, exclude) => { - var target = {}; - for (var prop in source) - if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0) - target[prop] = source[prop]; - if (source != null && __getOwnPropSymbols) - for (var prop of __getOwnPropSymbols(source)) { - if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop)) - target[prop] = source[prop]; - } - return target; - }; - var __esm = (fn, res) => function __init() { - return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res; - }; - var __commonJS = (cb, mod) => function __require() { - return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; - }; - var __export = (target, all) => { - for (var name in all) - __defProp(target, name, { get: all[name], enumerable: true }); - }; - var __copyProps = (to, from, except, desc) => { - if (from && typeof from === "object" || typeof from === "function") { - for (let key of __getOwnPropNames(from)) - if (!__hasOwnProp.call(to, key) && key !== except) - __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); - } - return to; - }; - var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( - // If the importer is in node compatibility mode or this is not an ESM - // file that has been converted to a CommonJS file using a Babel- - // compatible transform (i.e. "__esModule" has not been set), then set - // "default" to the CommonJS "module.exports" for node compatibility. - isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, - mod - )); - var __async = (__this, __arguments, generator) => { - return new Promise((resolve, reject) => { - var fulfilled = (value) => { - try { - step(generator.next(value)); - } catch (e4) { - reject(e4); - } - }; - var rejected = (value) => { - try { - step(generator.throw(value)); - } catch (e4) { - reject(e4); - } - }; - var step = (x2) => x2.done ? resolve(x2.value) : Promise.resolve(x2.value).then(fulfilled, rejected); - step((generator = generator.apply(__this, __arguments)).next()); - }); - }; - - // node_modules/svg4everybody/dist/svg4everybody.js - var require_svg4everybody = __commonJS({ - "node_modules/svg4everybody/dist/svg4everybody.js"(exports, module) { - !function(root, factory) { - "function" == typeof define && define.amd ? ( - // AMD. Register as an anonymous module unless amdModuleId is set - define([], function() { - return root.svg4everybody = factory(); - }) - ) : "object" == typeof module && module.exports ? ( - // Node. Does not work with strict CommonJS, but - // only CommonJS-like environments that support module.exports, - // like Node. - module.exports = factory() - ) : root.svg4everybody = factory(); - }(exports, function() { - function embed(parent, svg, target) { - if (target) { - var fragment = document.createDocumentFragment(), viewBox = !svg.hasAttribute("viewBox") && target.getAttribute("viewBox"); - viewBox && svg.setAttribute("viewBox", viewBox); - for (var clone = target.cloneNode(true); clone.childNodes.length; ) { - fragment.appendChild(clone.firstChild); - } - parent.appendChild(fragment); - } - } - function loadreadystatechange(xhr) { - xhr.onreadystatechange = function() { - if (4 === xhr.readyState) { - var cachedDocument = xhr._cachedDocument; - cachedDocument || (cachedDocument = xhr._cachedDocument = document.implementation.createHTMLDocument(""), cachedDocument.body.innerHTML = xhr.responseText, xhr._cachedTarget = {}), // clear the xhr embeds list and embed each item - xhr._embeds.splice(0).map(function(item) { - var target = xhr._cachedTarget[item.id]; - target || (target = xhr._cachedTarget[item.id] = cachedDocument.getElementById(item.id)), // embed the target into the svg - embed(item.parent, item.svg, target); - }); - } - }, // test the ready state change immediately - xhr.onreadystatechange(); - } - function svg4everybody2(rawopts) { - function oninterval() { - for (var index = 0; index < uses.length; ) { - var use = uses[index], parent = use.parentNode, svg = getSVGAncestor(parent), src = use.getAttribute("xlink:href") || use.getAttribute("href"); - if (!src && opts.attributeName && (src = use.getAttribute(opts.attributeName)), svg && src) { - if (polyfill) { - if (!opts.validate || opts.validate(src, svg, use)) { - parent.removeChild(use); - var srcSplit = src.split("#"), url = srcSplit.shift(), id = srcSplit.join("#"); - if (url.length) { - var xhr = requests[url]; - xhr || (xhr = requests[url] = new XMLHttpRequest(), xhr.open("GET", url), xhr.send(), xhr._embeds = []), // add the svg and id as an item to the xhr embeds list - xhr._embeds.push({ - parent, - svg, - id - }), // prepare the xhr ready state change event - loadreadystatechange(xhr); - } else { - embed(parent, svg, document.getElementById(id)); - } - } else { - ++index, ++numberOfSvgUseElementsToBypass; - } - } - } else { - ++index; - } - } - (!uses.length || uses.length - numberOfSvgUseElementsToBypass > 0) && requestAnimationFrame2(oninterval, 67); - } - var polyfill, opts = Object(rawopts), newerIEUA = /\bTrident\/[567]\b|\bMSIE (?:9|10)\.0\b/, webkitUA = /\bAppleWebKit\/(\d+)\b/, olderEdgeUA = /\bEdge\/12\.(\d+)\b/, edgeUA = /\bEdge\/.(\d+)\b/, inIframe = window.top !== window.self; - polyfill = "polyfill" in opts ? opts.polyfill : newerIEUA.test(navigator.userAgent) || (navigator.userAgent.match(olderEdgeUA) || [])[1] < 10547 || (navigator.userAgent.match(webkitUA) || [])[1] < 537 || edgeUA.test(navigator.userAgent) && inIframe; - var requests = {}, requestAnimationFrame2 = window.requestAnimationFrame || setTimeout, uses = document.getElementsByTagName("use"), numberOfSvgUseElementsToBypass = 0; - polyfill && oninterval(); - } - function getSVGAncestor(node) { - for (var svg = node; "svg" !== svg.nodeName.toLowerCase() && (svg = svg.parentNode); ) { - } - return svg; - } - return svg4everybody2; - }); - } - }); - - // assets/scripts/utils/grid-helper.js - var grid_helper_exports = {}; - __export(grid_helper_exports, { - gridHelper: () => gridHelper - }); - function gridHelper({ - gutterCssVar = GRID_HELPER_GUTTER_CSS_VAR, - marginCssVar = GRID_HELPER_MARGIN_CSS_VAR, - rgbaColor = GRID_HELPER_RGBA_COLOR - } = {}) { - const $gridContainer = document.createElement("div"); - document.body.append($gridContainer); - setGridHelperColumns($gridContainer, rgbaColor); - setGridHelperStyles($gridContainer, gutterCssVar, marginCssVar); - setGridEvents($gridContainer, rgbaColor); - } - function setGridHelperStyles($container, gutterCssVar, marginCssVar) { - const elStyles = $container.style; - elStyles.zIndex = "10000"; - elStyles.position = "fixed"; - elStyles.top = "0"; - elStyles.left = "0"; - elStyles.display = "flex"; - elStyles.width = "100%"; - elStyles.height = "100%"; - elStyles.columnGap = `var(${gutterCssVar}, 0)`; - elStyles.paddingLeft = `var(${marginCssVar}, 0)`; - elStyles.paddingRight = `var(${marginCssVar}, 0)`; - elStyles.pointerEvents = "none"; - elStyles.visibility = "hidden"; - } - function setGridHelperColumns($container, rgbaColor) { - $container.innerHTML = ""; - const columns = Number( - window.getComputedStyle($container).getPropertyValue("--grid-columns") - ); - let $col; - for (var i5 = 0; i5 < columns; i5++) { - $col = document.createElement("div"); - $col.style.flex = "1 1 0"; - $col.style.backgroundColor = rgbaColor; - $container.appendChild($col); - } - } - function setGridEvents($container, rgbaColor) { - window.addEventListener( - "resize", - setGridHelperColumns($container, rgbaColor) - ); - let ctrlDown = false; - let isActive = false; - document.addEventListener("keydown", (e4) => { - if (e4.key == "Control") { - ctrlDown = true; - } else { - if (ctrlDown && e4.key == "g") { - if (isActive) { - $container.style.visibility = "hidden"; - } else { - $container.style.visibility = "visible"; - } - isActive = !isActive; - } - } - }); - document.addEventListener("keyup", (e4) => { - if (e4.key == "Control") { - ctrlDown = false; - } - }); - } - var GRID_HELPER_GUTTER_CSS_VAR, GRID_HELPER_MARGIN_CSS_VAR, GRID_HELPER_RGBA_COLOR; - var init_grid_helper = __esm({ - "assets/scripts/utils/grid-helper.js"() { - GRID_HELPER_GUTTER_CSS_VAR = "--grid-gutter"; - GRID_HELPER_MARGIN_CSS_VAR = "--grid-margin"; - GRID_HELPER_RGBA_COLOR = "rgba(255, 0, 0, .1)"; - } - }); - - // node_modules/modujs/dist/main.esm.js - function _typeof(obj) { - "@babel/helpers - typeof"; - if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { - _typeof = function(obj2) { - return typeof obj2; - }; - } else { - _typeof = function(obj2) { - return obj2 && typeof Symbol === "function" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2; - }; - } - return _typeof(obj); - } - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } - } - function _defineProperties(target, props) { - for (var i5 = 0; i5 < props.length; i5++) { - var descriptor = props[i5]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) - descriptor.writable = true; - Object.defineProperty(target, descriptor.key, descriptor); - } - } - function _createClass(Constructor, protoProps, staticProps) { - if (protoProps) - _defineProperties(Constructor.prototype, protoProps); - if (staticProps) - _defineProperties(Constructor, staticProps); - return Constructor; - } - function _defineProperty(obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; - } - return obj; - } - function _slicedToArray(arr, i5) { - return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i5) || _unsupportedIterableToArray(arr, i5) || _nonIterableRest(); - } - function _toConsumableArray(arr) { - return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); - } - function _arrayWithoutHoles(arr) { - if (Array.isArray(arr)) - return _arrayLikeToArray(arr); - } - function _arrayWithHoles(arr) { - if (Array.isArray(arr)) - return arr; - } - function _iterableToArray(iter) { - if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) - return Array.from(iter); - } - function _iterableToArrayLimit(arr, i5) { - if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) - return; - var _arr = []; - var _n = true; - var _d = false; - var _e = void 0; - try { - for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { - _arr.push(_s.value); - if (i5 && _arr.length === i5) - break; - } - } catch (err) { - _d = true; - _e = err; - } finally { - try { - if (!_n && _i["return"] != null) - _i["return"](); - } finally { - if (_d) - throw _e; - } - } - return _arr; - } - function _unsupportedIterableToArray(o5, minLen) { - if (!o5) - return; - if (typeof o5 === "string") - return _arrayLikeToArray(o5, minLen); - var n5 = Object.prototype.toString.call(o5).slice(8, -1); - if (n5 === "Object" && o5.constructor) - n5 = o5.constructor.name; - if (n5 === "Map" || n5 === "Set") - return Array.from(o5); - if (n5 === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n5)) - return _arrayLikeToArray(o5, minLen); - } - function _arrayLikeToArray(arr, len) { - if (len == null || len > arr.length) - len = arr.length; - for (var i5 = 0, arr2 = new Array(len); i5 < len; i5++) - arr2[i5] = arr[i5]; - return arr2; - } - function _nonIterableSpread() { - throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); - } - function _nonIterableRest() { - throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); - } - var _default = /* @__PURE__ */ function() { - function _default2(options) { - _classCallCheck(this, _default2); - this.mAttr = "data-" + options.dataName; - this.mCaptureEvents = ["mouseenter", "mouseleave"]; - this.el = options.el; - } - _createClass(_default2, [{ - key: "mInit", - value: function mInit(modules) { - var _this = this; - this.modules = modules; - this.mCheckEventTarget = this.mCheckEventTarget.bind(this); - if (this.events) { - Object.keys(this.events).forEach(function(event) { - return _this.mAddEvent(event); - }); - } - } - }, { - key: "mUpdate", - value: function mUpdate(modules) { - this.modules = modules; - } - }, { - key: "mDestroy", - value: function mDestroy() { - var _this2 = this; - if (this.events) { - Object.keys(this.events).forEach(function(event) { - return _this2.mRemoveEvent(event); - }); - } - } - }, { - key: "mAddEvent", - value: function mAddEvent(event) { - var capture = this.mCaptureEvents.includes(event) ? true : false; - this.el.addEventListener(event, this.mCheckEventTarget, capture); - } - }, { - key: "mRemoveEvent", - value: function mRemoveEvent(event) { - var capture = this.mCaptureEvents.includes(event) ? true : false; - this.el.removeEventListener(event, this.mCheckEventTarget, capture); - } - }, { - key: "mCheckEventTarget", - value: function mCheckEventTarget(e4) { - var event = this.events[e4.type]; - if (typeof event === "string") { - this[event](e4); - } else { - var data = "[" + this.mAttr + "]"; - var target = e4.target; - if (this.mCaptureEvents.includes(e4.type)) { - if (target.matches(data)) { - this.mCallEventMethod(e4, event, target); - } - } else { - while (target && target !== document) { - if (target.matches(data)) { - if (this.mCallEventMethod(e4, event, target) != "undefined") { - break; - } - } - target = target.parentNode; - } - } - } - } - }, { - key: "mCallEventMethod", - value: function mCallEventMethod(e4, event, target) { - var name = target.getAttribute(this.mAttr); - if (event.hasOwnProperty(name)) { - var method = event[name]; - if (!e4.hasOwnProperty("currentTarget")) { - Object.defineProperty(e4, "currentTarget", { - value: target - }); - } - if (!e4.hasOwnProperty("curTarget")) { - Object.defineProperty(e4, "curTarget", { - value: target - }); - } - this[method](e4); - } - } - }, { - key: "$", - value: function $3(query, context) { - var classIndex = query.indexOf("."); - var idIndex = query.indexOf("#"); - var attrIndex = query.indexOf("["); - var indexes = [classIndex, idIndex, attrIndex].filter(function(index2) { - return index2 != -1; - }); - var index = false; - var name = query; - var more = ""; - var parent = this.el; - if (indexes.length) { - index = Math.min.apply(Math, _toConsumableArray(indexes)); - name = query.slice(0, index); - more = query.slice(index); - } - if (_typeof(context) == "object") { - parent = context; - } - return parent.querySelectorAll("[" + this.mAttr + "=" + name + "]" + more); - } - }, { - key: "parent", - value: function parent(query, context) { - var data = "[" + this.mAttr + "=" + query + "]"; - var parent2 = context.parentNode; - while (parent2 && parent2 !== document) { - if (parent2.matches(data)) { - return parent2; - } - parent2 = parent2.parentNode; - } - } - }, { - key: "getData", - value: function getData(name, context) { - var target = context || this.el; - return target.getAttribute(this.mAttr + "-" + name); - } - }, { - key: "setData", - value: function setData(name, value, context) { - var target = context || this.el; - return target.setAttribute(this.mAttr + "-" + name, value); - } - }, { - key: "call", - value: function call(func, args, mod, id) { - var _this3 = this; - if (args && !mod) { - mod = args; - args = false; - } - if (this.modules[mod]) { - if (id) { - if (this.modules[mod][id]) { - this.modules[mod][id][func](args); - } - } else { - Object.keys(this.modules[mod]).forEach(function(id2) { - _this3.modules[mod][id2][func](args); - }); - } - } - } - }, { - key: "on", - value: function on(e4, mod, func, id) { - var _this4 = this; - if (this.modules[mod]) { - if (id) { - this.modules[mod][id].el.addEventListener(e4, function(o5) { - return func(o5); - }); - } else { - Object.keys(this.modules[mod]).forEach(function(i5) { - _this4.modules[mod][i5].el.addEventListener(e4, function(o5) { - return func(o5); - }); - }); - } - } - } - }, { - key: "init", - value: function init2() { - } - }, { - key: "destroy", - value: function destroy() { - } - }]); - return _default2; - }(); - var _default$1 = /* @__PURE__ */ function() { - function _default2(options) { - _classCallCheck(this, _default2); - this.app; - this.modules = options.modules; - this.currentModules = {}; - this.activeModules = {}; - this.newModules = {}; - this.moduleId = 0; - } - _createClass(_default2, [{ - key: "init", - value: function init2(app2, scope) { - var _this = this; - var container = scope || document; - var elements = container.querySelectorAll("*"); - if (app2 && !this.app) { - this.app = app2; - } - this.activeModules["app"] = { - "app": this.app - }; - elements.forEach(function(el) { - Array.from(el.attributes).forEach(function(i5) { - if (i5.name.startsWith("data-module")) { - var moduleExists = false; - var dataName = i5.name.split("-").splice(2); - var moduleName = _this.toCamel(dataName); - if (_this.modules[moduleName]) { - moduleExists = true; - } else if (_this.modules[_this.toUpper(moduleName)]) { - moduleName = _this.toUpper(moduleName); - moduleExists = true; - } - if (moduleExists) { - var options = { - el, - name: moduleName, - dataName: dataName.join("-") - }; - var module = new _this.modules[moduleName](options); - var id = i5.value; - if (!id) { - _this.moduleId++; - id = "m" + _this.moduleId; - el.setAttribute(i5.name, id); - } - _this.addActiveModule(moduleName, id, module); - var moduleId = moduleName + "-" + id; - if (scope) { - _this.newModules[moduleId] = module; - } else { - _this.currentModules[moduleId] = module; - } - } - } - }); - }); - Object.entries(this.currentModules).forEach(function(_ref) { - var _ref2 = _slicedToArray(_ref, 2), id = _ref2[0], module = _ref2[1]; - if (scope) { - var split = id.split("-"); - var moduleName = split.shift(); - var moduleId = split.pop(); - _this.addActiveModule(moduleName, moduleId, module); - } else { - _this.initModule(module); - } - }); - } - }, { - key: "initModule", - value: function initModule(module) { - module.mInit(this.activeModules); - module.init(); - } - }, { - key: "addActiveModule", - value: function addActiveModule(name, id, module) { - if (this.activeModules[name]) { - Object.assign(this.activeModules[name], _defineProperty({}, id, module)); - } else { - this.activeModules[name] = _defineProperty({}, id, module); - } - } - }, { - key: "update", - value: function update(scope) { - var _this2 = this; - this.init(this.app, scope); - Object.entries(this.currentModules).forEach(function(_ref3) { - var _ref4 = _slicedToArray(_ref3, 2), id = _ref4[0], module = _ref4[1]; - module.mUpdate(_this2.activeModules); - }); - Object.entries(this.newModules).forEach(function(_ref5) { - var _ref6 = _slicedToArray(_ref5, 2), id = _ref6[0], module = _ref6[1]; - _this2.initModule(module); - }); - Object.assign(this.currentModules, this.newModules); - } - }, { - key: "destroy", - value: function destroy(scope) { - if (scope) { - this.destroyScope(scope); - } else { - this.destroyModules(); - } - } - }, { - key: "destroyScope", - value: function destroyScope(scope) { - var _this3 = this; - var elements = scope.querySelectorAll("*"); - elements.forEach(function(el) { - Array.from(el.attributes).forEach(function(i5) { - if (i5.name.startsWith("data-module")) { - var id = i5.value; - var dataName = i5.name.split("-").splice(2); - var moduleName = _this3.toCamel(dataName) + "-" + id; - var moduleExists = false; - if (_this3.currentModules[moduleName]) { - moduleExists = true; - } else if (_this3.currentModules[_this3.toUpper(moduleName)]) { - moduleName = _this3.toUpper(moduleName); - moduleExists = true; - } - if (moduleExists) { - _this3.destroyModule(_this3.currentModules[moduleName]); - delete _this3.currentModules[moduleName]; - } - } - }); - }); - this.activeModules = {}; - this.newModules = {}; - } - }, { - key: "destroyModules", - value: function destroyModules() { - var _this4 = this; - Object.entries(this.currentModules).forEach(function(_ref7) { - var _ref8 = _slicedToArray(_ref7, 2), id = _ref8[0], module = _ref8[1]; - _this4.destroyModule(module); - }); - this.currentModules = []; - } - }, { - key: "destroyModule", - value: function destroyModule(module) { - module.mDestroy(); - module.destroy(); - } - }, { - key: "toCamel", - value: function toCamel(arr) { - var _this5 = this; - return arr.reduce(function(a4, b3) { - return a4 + _this5.toUpper(b3); - }); - } - }, { - key: "toUpper", - value: function toUpper(str) { - return str.charAt(0).toUpperCase() + str.slice(1); - } - }]); - return _default2; - }(); - var main_esm_default = _default$1; - - // assets/scripts/modules.js - var modules_exports = {}; - __export(modules_exports, { - Dialog: () => Dialog_default, - Load: () => Load_default, - Scroll: () => Scroll_default - }); - - // assets/scripts/modules/Dialog.js - var Dialog_default = class extends _default { - constructor(m3) { - super(m3); - this.$closeBtn = this.$("close")[0]; - } - init() { - this.onKeyDown = this.onKeyDown.bind(this); - } - onKeyDown(e4) { - if (e4.key === "Escape") { - console.log("ESCAPE"); - e4.preventDefault(); - this.$closeBtn.click(); - } - } - populate(container) { - this.el.appendChild(container); - } - show() { - this.el.showModal(); - window.addEventListener("keydown", this.onKeyDown); - } - close() { - window.removeEventListener("keydown", this.onKeyDown); - this.el.close(); - } - }; - - // node_modules/delegate-it/delegate.js - var ledger = /* @__PURE__ */ new WeakMap(); - function editLedger(wanted, baseElement, callback, setup) { - var _a, _b; - if (!wanted && !ledger.has(baseElement)) { - return false; - } - const elementMap = (_a = ledger.get(baseElement)) != null ? _a : /* @__PURE__ */ new WeakMap(); - ledger.set(baseElement, elementMap); - const setups = (_b = elementMap.get(callback)) != null ? _b : /* @__PURE__ */ new Set(); - elementMap.set(callback, setups); - const existed = setups.has(setup); - if (wanted) { - setups.add(setup); - } else { - setups.delete(setup); - } - return existed && wanted; - } - function safeClosest(event, selector) { - let target = event.target; - if (target instanceof Text) { - target = target.parentElement; - } - if (target instanceof Element && event.currentTarget instanceof Element) { - const closest = target.closest(selector); - if (closest && event.currentTarget.contains(closest)) { - return closest; - } - } - } - function delegate(selector, type, callback, options = {}) { - const { signal, base = document } = options; - if (signal == null ? void 0 : signal.aborted) { - return; - } - const _a = options, { once } = _a, nativeListenerOptions = __objRest(_a, ["once"]); - const baseElement = base instanceof Document ? base.documentElement : base; - const capture = Boolean(typeof options === "object" ? options.capture : options); - const listenerFn = (event) => { - const delegateTarget = safeClosest(event, selector); - if (delegateTarget) { - const delegateEvent = Object.assign(event, { delegateTarget }); - callback.call(baseElement, delegateEvent); - if (once) { - baseElement.removeEventListener(type, listenerFn, nativeListenerOptions); - editLedger(false, baseElement, callback, setup); - } - } - }; - const setup = JSON.stringify({ selector, type, capture }); - const isAlreadyListening = editLedger(true, baseElement, callback, setup); - if (!isAlreadyListening) { - baseElement.addEventListener(type, listenerFn, nativeListenerOptions); - } - signal == null ? void 0 : signal.addEventListener("abort", () => { - editLedger(false, baseElement, callback, setup); - }); - } - var delegate_default = delegate; - - // node_modules/path-to-regexp/dist.es2015/index.js - function lexer(str) { - var tokens = []; - var i5 = 0; - while (i5 < str.length) { - var char = str[i5]; - if (char === "*" || char === "+" || char === "?") { - tokens.push({ type: "MODIFIER", index: i5, value: str[i5++] }); - continue; - } - if (char === "\\") { - tokens.push({ type: "ESCAPED_CHAR", index: i5++, value: str[i5++] }); - continue; - } - if (char === "{") { - tokens.push({ type: "OPEN", index: i5, value: str[i5++] }); - continue; - } - if (char === "}") { - tokens.push({ type: "CLOSE", index: i5, value: str[i5++] }); - continue; - } - if (char === ":") { - var name = ""; - var j2 = i5 + 1; - while (j2 < str.length) { - var code = str.charCodeAt(j2); - if ( - // `0-9` - code >= 48 && code <= 57 || // `A-Z` - code >= 65 && code <= 90 || // `a-z` - code >= 97 && code <= 122 || // `_` - code === 95 - ) { - name += str[j2++]; - continue; - } - break; - } - if (!name) - throw new TypeError("Missing parameter name at ".concat(i5)); - tokens.push({ type: "NAME", index: i5, value: name }); - i5 = j2; - continue; - } - if (char === "(") { - var count = 1; - var pattern = ""; - var j2 = i5 + 1; - if (str[j2] === "?") { - throw new TypeError('Pattern cannot start with "?" at '.concat(j2)); - } - while (j2 < str.length) { - if (str[j2] === "\\") { - pattern += str[j2++] + str[j2++]; - continue; - } - if (str[j2] === ")") { - count--; - if (count === 0) { - j2++; - break; - } - } else if (str[j2] === "(") { - count++; - if (str[j2 + 1] !== "?") { - throw new TypeError("Capturing groups are not allowed at ".concat(j2)); - } - } - pattern += str[j2++]; - } - if (count) - throw new TypeError("Unbalanced pattern at ".concat(i5)); - if (!pattern) - throw new TypeError("Missing pattern at ".concat(i5)); - tokens.push({ type: "PATTERN", index: i5, value: pattern }); - i5 = j2; - continue; - } - tokens.push({ type: "CHAR", index: i5, value: str[i5++] }); - } - tokens.push({ type: "END", index: i5, value: "" }); - return tokens; - } - function parse(str, options) { - if (options === void 0) { - options = {}; - } - var tokens = lexer(str); - var _a = options.prefixes, prefixes = _a === void 0 ? "./" : _a; - var defaultPattern = "[^".concat(escapeString(options.delimiter || "/#?"), "]+?"); - var result = []; - var key = 0; - var i5 = 0; - var path = ""; - var tryConsume = function(type) { - if (i5 < tokens.length && tokens[i5].type === type) - return tokens[i5++].value; - }; - var mustConsume = function(type) { - var value2 = tryConsume(type); - if (value2 !== void 0) - return value2; - var _a2 = tokens[i5], nextType = _a2.type, index = _a2.index; - throw new TypeError("Unexpected ".concat(nextType, " at ").concat(index, ", expected ").concat(type)); - }; - var consumeText = function() { - var result2 = ""; - var value2; - while (value2 = tryConsume("CHAR") || tryConsume("ESCAPED_CHAR")) { - result2 += value2; - } - return result2; - }; - while (i5 < tokens.length) { - var char = tryConsume("CHAR"); - var name = tryConsume("NAME"); - var pattern = tryConsume("PATTERN"); - if (name || pattern) { - var prefix = char || ""; - if (prefixes.indexOf(prefix) === -1) { - path += prefix; - prefix = ""; - } - if (path) { - result.push(path); - path = ""; - } - result.push({ - name: name || key++, - prefix, - suffix: "", - pattern: pattern || defaultPattern, - modifier: tryConsume("MODIFIER") || "" - }); - continue; - } - var value = char || tryConsume("ESCAPED_CHAR"); - if (value) { - path += value; - continue; - } - if (path) { - result.push(path); - path = ""; - } - var open = tryConsume("OPEN"); - if (open) { - var prefix = consumeText(); - var name_1 = tryConsume("NAME") || ""; - var pattern_1 = tryConsume("PATTERN") || ""; - var suffix = consumeText(); - mustConsume("CLOSE"); - result.push({ - name: name_1 || (pattern_1 ? key++ : ""), - pattern: name_1 && !pattern_1 ? defaultPattern : pattern_1, - prefix, - suffix, - modifier: tryConsume("MODIFIER") || "" - }); - continue; - } - mustConsume("END"); - } - return result; - } - function match(str, options) { - var keys = []; - var re = pathToRegexp(str, keys, options); - return regexpToFunction(re, keys, options); - } - function regexpToFunction(re, keys, options) { - if (options === void 0) { - options = {}; - } - var _a = options.decode, decode = _a === void 0 ? function(x2) { - return x2; - } : _a; - return function(pathname) { - var m3 = re.exec(pathname); - if (!m3) - return false; - var path = m3[0], index = m3.index; - var params = /* @__PURE__ */ Object.create(null); - var _loop_1 = function(i6) { - if (m3[i6] === void 0) - return "continue"; - var key = keys[i6 - 1]; - if (key.modifier === "*" || key.modifier === "+") { - params[key.name] = m3[i6].split(key.prefix + key.suffix).map(function(value) { - return decode(value, key); - }); - } else { - params[key.name] = decode(m3[i6], key); - } - }; - for (var i5 = 1; i5 < m3.length; i5++) { - _loop_1(i5); - } - return { path, index, params }; - }; - } - function escapeString(str) { - return str.replace(/([.+*?=^!:${}()[\]|/\\])/g, "\\$1"); - } - function flags(options) { - return options && options.sensitive ? "" : "i"; - } - function regexpToRegexp(path, keys) { - if (!keys) - return path; - var groupsRegex = /\((?:\?<(.*?)>)?(?!\?)/g; - var index = 0; - var execResult = groupsRegex.exec(path.source); - while (execResult) { - keys.push({ - // Use parenthesized substring match if available, index otherwise - name: execResult[1] || index++, - prefix: "", - suffix: "", - modifier: "", - pattern: "" - }); - execResult = groupsRegex.exec(path.source); - } - return path; - } - function arrayToRegexp(paths, keys, options) { - var parts = paths.map(function(path) { - return pathToRegexp(path, keys, options).source; - }); - return new RegExp("(?:".concat(parts.join("|"), ")"), flags(options)); - } - function stringToRegexp(path, keys, options) { - return tokensToRegexp(parse(path, options), keys, options); - } - function tokensToRegexp(tokens, keys, options) { - if (options === void 0) { - options = {}; - } - var _a = options.strict, strict = _a === void 0 ? false : _a, _b = options.start, start = _b === void 0 ? true : _b, _c = options.end, end = _c === void 0 ? true : _c, _d = options.encode, encode = _d === void 0 ? function(x2) { - return x2; - } : _d, _e = options.delimiter, delimiter = _e === void 0 ? "/#?" : _e, _f = options.endsWith, endsWith = _f === void 0 ? "" : _f; - var endsWithRe = "[".concat(escapeString(endsWith), "]|$"); - var delimiterRe = "[".concat(escapeString(delimiter), "]"); - var route = start ? "^" : ""; - for (var _i = 0, tokens_1 = tokens; _i < tokens_1.length; _i++) { - var token = tokens_1[_i]; - if (typeof token === "string") { - route += escapeString(encode(token)); - } else { - var prefix = escapeString(encode(token.prefix)); - var suffix = escapeString(encode(token.suffix)); - if (token.pattern) { - if (keys) - keys.push(token); - if (prefix || suffix) { - if (token.modifier === "+" || token.modifier === "*") { - var mod = token.modifier === "*" ? "?" : ""; - route += "(?:".concat(prefix, "((?:").concat(token.pattern, ")(?:").concat(suffix).concat(prefix, "(?:").concat(token.pattern, "))*)").concat(suffix, ")").concat(mod); - } else { - route += "(?:".concat(prefix, "(").concat(token.pattern, ")").concat(suffix, ")").concat(token.modifier); - } - } else { - if (token.modifier === "+" || token.modifier === "*") { - route += "((?:".concat(token.pattern, ")").concat(token.modifier, ")"); - } else { - route += "(".concat(token.pattern, ")").concat(token.modifier); - } - } - } else { - route += "(?:".concat(prefix).concat(suffix, ")").concat(token.modifier); - } - } - } - if (end) { - if (!strict) - route += "".concat(delimiterRe, "?"); - route += !options.endsWith ? "$" : "(?=".concat(endsWithRe, ")"); - } else { - var endToken = tokens[tokens.length - 1]; - var isEndDelimited = typeof endToken === "string" ? delimiterRe.indexOf(endToken[endToken.length - 1]) > -1 : endToken === void 0; - if (!strict) { - route += "(?:".concat(delimiterRe, "(?=").concat(endsWithRe, "))?"); - } - if (!isEndDelimited) { - route += "(?=".concat(delimiterRe, "|").concat(endsWithRe, ")"); - } - } - return new RegExp(route, flags(options)); - } - function pathToRegexp(path, keys, options) { - if (path instanceof RegExp) - return regexpToRegexp(path, keys); - if (Array.isArray(path)) - return arrayToRegexp(path, keys, options); - return stringToRegexp(path, keys, options); - } - - // node_modules/swup/dist/Swup.modern.js - function i() { - return i = Object.assign ? Object.assign.bind() : function(t2) { - for (var e4 = 1; e4 < arguments.length; e4++) { - var i5 = arguments[e4]; - for (var s5 in i5) - Object.prototype.hasOwnProperty.call(i5, s5) && (t2[s5] = i5[s5]); - } - return t2; - }, i.apply(this, arguments); - } - var s = (t2, e4) => String(t2).toLowerCase().replace(/[\s/_.]+/g, "-").replace(/[^\w-]+/g, "").replace(/--+/g, "-").replace(/^-+|-+$/g, "") || e4 || ""; - var n = ({ hash: t2 } = {}) => window.location.pathname + window.location.search + (t2 ? window.location.hash : ""); - var o = (t2, e4 = {}) => { - const s5 = i({ url: t2 = t2 || n({ hash: true }), random: Math.random(), source: "swup" }, e4); - window.history.pushState(s5, "", t2); - }; - var r = (t2 = null, e4 = {}) => { - t2 = t2 || n({ hash: true }); - const s5 = i({}, window.history.state || {}, { url: t2, random: Math.random(), source: "swup" }, e4); - window.history.replaceState(s5, "", t2); - }; - var a = (e4, s5, n5, o5) => { - const r5 = new AbortController(); - return o5 = i({}, o5, { signal: r5.signal }), delegate_default(e4, s5, n5, o5), { destroy: () => r5.abort() }; - }; - var l = class extends URL { - constructor(t2, e4 = document.baseURI) { - super(t2.toString(), e4), Object.setPrototypeOf(this, l.prototype); - } - get url() { - return this.pathname + this.search; - } - static fromElement(t2) { - const e4 = t2.getAttribute("href") || t2.getAttribute("xlink:href") || ""; - return new l(e4); - } - static fromUrl(t2) { - return new l(t2); - } - }; - var h = (t2, i5) => { - try { - return match(t2, i5); - } catch (e4) { - throw new Error(`[swup] Error parsing path "${String(t2)}": -${String(e4)}`); - } - }; - var c = class extends Error { - constructor(t2, e4) { - super(t2), this.url = void 0, this.status = void 0, this.aborted = void 0, this.timedOut = void 0, this.name = "FetchError", this.url = e4.url, this.status = e4.status, this.aborted = e4.aborted || false, this.timedOut = e4.timedOut || false; - } - }; - function u(_0) { - return __async(this, arguments, function* (t2, e4 = {}) { - var s5; - t2 = l.fromUrl(t2).url; - const { visit: n5 = this.visit } = e4, o5 = i({}, this.options.requestHeaders, e4.headers), r5 = null != (s5 = e4.timeout) ? s5 : this.options.timeout, a4 = new AbortController(), { signal: h4 } = a4; - e4 = i({}, e4, { headers: o5, signal: h4 }); - let u3, d3 = false, p3 = null; - r5 && r5 > 0 && (p3 = setTimeout(() => { - d3 = true, a4.abort("timeout"); - }, r5)); - try { - u3 = yield this.hooks.call("fetch:request", n5, { url: t2, options: e4 }, (t3, { url: e5, options: i5 }) => fetch(e5, i5)), p3 && clearTimeout(p3); - } catch (e5) { - if (d3) - throw this.hooks.call("fetch:timeout", n5, { url: t2 }), new c(`Request timed out: ${t2}`, { url: t2, timedOut: d3 }); - if ("AbortError" === (null == e5 ? void 0 : e5.name) || h4.aborted) - throw new c(`Request aborted: ${t2}`, { url: t2, aborted: true }); - throw e5; - } - const { status: m3, url: w3 } = u3, g3 = yield u3.text(); - if (500 === m3) - throw this.hooks.call("fetch:error", n5, { status: m3, response: u3, url: w3 }), new c(`Server error: ${w3}`, { status: m3, url: w3 }); - if (!g3) - throw new c(`Empty response: ${w3}`, { status: m3, url: w3 }); - const { url: f3 } = l.fromUrl(w3), v2 = { url: f3, html: g3 }; - return !n5.cache.write || e4.method && "GET" !== e4.method || t2 !== f3 || this.cache.set(v2.url, v2), v2; - }); - } - var d = class { - constructor(t2) { - this.swup = void 0, this.pages = /* @__PURE__ */ new Map(), this.swup = t2; - } - get size() { - return this.pages.size; - } - get all() { - const t2 = /* @__PURE__ */ new Map(); - return this.pages.forEach((e4, s5) => { - t2.set(s5, i({}, e4)); - }), t2; - } - has(t2) { - return this.pages.has(this.resolve(t2)); - } - get(t2) { - const e4 = this.pages.get(this.resolve(t2)); - return e4 ? i({}, e4) : e4; - } - set(t2, e4) { - e4 = i({}, e4, { url: t2 = this.resolve(t2) }), this.pages.set(t2, e4), this.swup.hooks.callSync("cache:set", void 0, { page: e4 }); - } - update(t2, e4) { - t2 = this.resolve(t2); - const s5 = i({}, this.get(t2), e4, { url: t2 }); - this.pages.set(t2, s5); - } - delete(t2) { - this.pages.delete(this.resolve(t2)); - } - clear() { - this.pages.clear(), this.swup.hooks.callSync("cache:clear", void 0, void 0); - } - prune(t2) { - this.pages.forEach((e4, i5) => { - t2(i5, e4) && this.delete(i5); - }); - } - resolve(t2) { - const { url: e4 } = l.fromUrl(t2); - return this.swup.resolveUrl(e4); - } - }; - var p = (t2, e4 = document) => e4.querySelector(t2); - var m = (t2, e4 = document) => Array.from(e4.querySelectorAll(t2)); - var w = () => new Promise((t2) => { - requestAnimationFrame(() => { - requestAnimationFrame(() => { - t2(); - }); - }); - }); - function g(t2) { - return !!t2 && ("object" == typeof t2 || "function" == typeof t2) && "function" == typeof t2.then; - } - function f(t2, e4 = []) { - return new Promise((i5, s5) => { - const n5 = t2(...e4); - g(n5) ? n5.then(i5, s5) : i5(n5); - }); - } - var y = (t2) => window.CSS && window.CSS.escape ? CSS.escape(t2) : t2; - var k = (t2) => 1e3 * Number(t2.slice(0, -1).replace(",", ".")); - var b = class { - constructor(t2) { - this.swup = void 0, this.swupClasses = ["to-", "is-changing", "is-rendering", "is-popstate", "is-animating", "is-leaving"], this.swup = t2; - } - get selectors() { - const { scope: t2 } = this.swup.visit.animation; - return "containers" === t2 ? this.swup.visit.containers : "html" === t2 ? ["html"] : Array.isArray(t2) ? t2 : []; - } - get selector() { - return this.selectors.join(","); - } - get targets() { - return this.selector.trim() ? m(this.selector) : []; - } - add(...t2) { - this.targets.forEach((e4) => e4.classList.add(...t2)); - } - remove(...t2) { - this.targets.forEach((e4) => e4.classList.remove(...t2)); - } - clear() { - this.targets.forEach((t2) => { - const e4 = t2.className.split(" ").filter((t3) => this.isSwupClass(t3)); - t2.classList.remove(...e4); - }); - } - isSwupClass(t2) { - return this.swupClasses.some((e4) => t2.startsWith(e4)); - } - }; - var S = class { - constructor(t2, e4) { - this.id = void 0, this.state = void 0, this.from = void 0, this.to = void 0, this.containers = void 0, this.animation = void 0, this.trigger = void 0, this.cache = void 0, this.history = void 0, this.scroll = void 0; - const { to: i5, from: s5 = t2.currentPageUrl, hash: n5, el: o5, event: r5 } = e4; - this.id = Math.random(), this.state = 1, this.from = { url: s5 }, this.to = { url: i5, hash: n5 }, this.containers = t2.options.containers, this.animation = { animate: true, wait: false, name: void 0, native: t2.options.native, scope: t2.options.animationScope, selector: t2.options.animationSelector }, this.trigger = { el: o5, event: r5 }, this.cache = { read: t2.options.cache, write: t2.options.cache }, this.history = { action: "push", popstate: false, direction: void 0 }, this.scroll = { reset: true, target: void 0 }; - } - advance(t2) { - this.state < t2 && (this.state = t2); - } - abort() { - this.state = 8; - } - get done() { - return this.state >= 7; - } - }; - function E(t2) { - return new S(this, t2); - } - var P = class { - constructor(t2) { - this.swup = void 0, this.registry = /* @__PURE__ */ new Map(), this.hooks = ["animation:out:start", "animation:out:await", "animation:out:end", "animation:in:start", "animation:in:await", "animation:in:end", "animation:skip", "cache:clear", "cache:set", "content:replace", "content:scroll", "enable", "disable", "fetch:request", "fetch:error", "fetch:timeout", "history:popstate", "link:click", "link:self", "link:anchor", "link:newtab", "page:load", "page:view", "scroll:top", "scroll:anchor", "visit:start", "visit:transition", "visit:abort", "visit:end"], this.swup = t2, this.init(); - } - init() { - this.hooks.forEach((t2) => this.create(t2)); - } - create(t2) { - this.registry.has(t2) || this.registry.set(t2, /* @__PURE__ */ new Map()); - } - exists(t2) { - return this.registry.has(t2); - } - get(t2) { - const e4 = this.registry.get(t2); - if (e4) - return e4; - console.error(`Unknown hook '${t2}'`); - } - clear() { - this.registry.forEach((t2) => t2.clear()); - } - on(t2, e4, s5 = {}) { - const n5 = this.get(t2); - if (!n5) - return console.warn(`Hook '${t2}' not found.`), () => { - }; - const o5 = i({}, s5, { id: n5.size + 1, hook: t2, handler: e4 }); - return n5.set(e4, o5), () => this.off(t2, e4); - } - before(t2, e4, s5 = {}) { - return this.on(t2, e4, i({}, s5, { before: true })); - } - replace(t2, e4, s5 = {}) { - return this.on(t2, e4, i({}, s5, { replace: true })); - } - once(t2, e4, s5 = {}) { - return this.on(t2, e4, i({}, s5, { once: true })); - } - off(t2, e4) { - const i5 = this.get(t2); - i5 && e4 ? i5.delete(e4) || console.warn(`Handler for hook '${t2}' not found.`) : i5 && i5.clear(); - } - call(t2, e4, i5, s5) { - return __async(this, null, function* () { - const [n5, o5, r5] = this.parseCallArgs(t2, e4, i5, s5), { before: a4, handler: l4, after: h4 } = this.getHandlers(t2, r5); - yield this.run(a4, n5, o5); - const [c4] = yield this.run(l4, n5, o5, true); - return yield this.run(h4, n5, o5), this.dispatchDomEvent(t2, n5, o5), c4; - }); - } - callSync(t2, e4, i5, s5) { - const [n5, o5, r5] = this.parseCallArgs(t2, e4, i5, s5), { before: a4, handler: l4, after: h4 } = this.getHandlers(t2, r5); - this.runSync(a4, n5, o5); - const [c4] = this.runSync(l4, n5, o5, true); - return this.runSync(h4, n5, o5), this.dispatchDomEvent(t2, n5, o5), c4; - } - parseCallArgs(t2, e4, i5, s5) { - return e4 instanceof S || "object" != typeof e4 && "function" != typeof i5 ? [e4, i5, s5] : [void 0, e4, i5]; - } - run(_0) { - return __async(this, arguments, function* (t2, e4 = this.swup.visit, i5, s5 = false) { - const n5 = []; - for (const { hook: o5, handler: r5, defaultHandler: a4, once: l4 } of t2) - if (null == e4 || !e4.done) { - l4 && this.off(o5, r5); - try { - const t3 = yield f(r5, [e4, i5, a4]); - n5.push(t3); - } catch (t3) { - if (s5) - throw t3; - console.error(`Error in hook '${o5}':`, t3); - } - } - return n5; - }); - } - runSync(t2, e4 = this.swup.visit, i5, s5 = false) { - const n5 = []; - for (const { hook: o5, handler: r5, defaultHandler: a4, once: l4 } of t2) - if (null == e4 || !e4.done) { - l4 && this.off(o5, r5); - try { - const t3 = r5(e4, i5, a4); - n5.push(t3), g(t3) && console.warn(`Swup will not await Promises in handler for synchronous hook '${o5}'.`); - } catch (t3) { - if (s5) - throw t3; - console.error(`Error in hook '${o5}':`, t3); - } - } - return n5; - } - getHandlers(t2, e4) { - const i5 = this.get(t2); - if (!i5) - return { found: false, before: [], handler: [], after: [], replaced: false }; - const s5 = Array.from(i5.values()), n5 = this.sortRegistrations, o5 = s5.filter(({ before: t3, replace: e5 }) => t3 && !e5).sort(n5), r5 = s5.filter(({ replace: t3 }) => t3).filter((t3) => true).sort(n5), a4 = s5.filter(({ before: t3, replace: e5 }) => !t3 && !e5).sort(n5), l4 = r5.length > 0; - let h4 = []; - if (e4 && (h4 = [{ id: 0, hook: t2, handler: e4 }], l4)) { - const i6 = r5.length - 1, s6 = (t3) => { - const i7 = r5[t3 - 1]; - return i7 ? (e5, n6) => i7.handler(e5, n6, s6(t3 - 1)) : e4; - }; - h4 = [{ id: 0, hook: t2, handler: r5[i6].handler, defaultHandler: s6(i6) }]; - } - return { found: true, before: o5, handler: h4, after: a4, replaced: l4 }; - } - sortRegistrations(t2, e4) { - var i5, s5; - return (null != (i5 = t2.priority) ? i5 : 0) - (null != (s5 = e4.priority) ? s5 : 0) || t2.id - e4.id || 0; - } - dispatchDomEvent(t2, e4, i5) { - if (null != e4 && e4.done) - return; - const s5 = { hook: t2, args: i5, visit: e4 || this.swup.visit }; - document.dispatchEvent(new CustomEvent("swup:any", { detail: s5, bubbles: true })), document.dispatchEvent(new CustomEvent(`swup:${t2}`, { detail: s5, bubbles: true })); - } - }; - var U = (t2) => { - if (t2 && "#" === t2.charAt(0) && (t2 = t2.substring(1)), !t2) - return null; - const e4 = decodeURIComponent(t2); - let i5 = document.getElementById(t2) || document.getElementById(e4) || p(`a[name='${y(t2)}']`) || p(`a[name='${y(e4)}']`); - return i5 || "top" !== t2 || (i5 = document.body), i5; - }; - var C = "transition"; - var $ = "animation"; - function x(_0) { - return __async(this, arguments, function* ({ elements: t2, selector: e4 }) { - if (false === e4 && !t2) - return; - let i5 = []; - if (t2) - i5 = Array.from(t2); - else if (e4 && (i5 = m(e4, document.body), !i5.length)) - return void console.warn(`[swup] No elements found matching animationSelector \`${e4}\``); - const s5 = i5.map((t3) => function(t4) { - const { type: e5, timeout: i6, propCount: s6 } = function(t5, e6) { - const i7 = window.getComputedStyle(t5), s7 = A(i7, `${C}Delay`), n5 = A(i7, `${C}Duration`), o5 = H(s7, n5), r5 = A(i7, `${$}Delay`), a4 = A(i7, `${$}Duration`), l4 = H(r5, a4); - let h4 = null, c4 = 0, u3 = 0; - return c4 = Math.max(o5, l4), h4 = c4 > 0 ? o5 > l4 ? C : $ : null, u3 = h4 ? h4 === C ? n5.length : a4.length : 0, { type: h4, timeout: c4, propCount: u3 }; - }(t4); - return !(!e5 || !i6) && new Promise((n5) => { - const o5 = `${e5}end`, r5 = performance.now(); - let a4 = 0; - const l4 = () => { - t4.removeEventListener(o5, h4), n5(); - }, h4 = (e6) => { - if (e6.target === t4) { - if (!function(t5) { - return [`${C}end`, `${$}end`].includes(t5.type); - }(e6)) - throw new Error("Not a transition or animation event."); - (performance.now() - r5) / 1e3 < e6.elapsedTime || ++a4 >= s6 && l4(); - } - }; - setTimeout(() => { - a4 < s6 && l4(); - }, i6 + 1), t4.addEventListener(o5, h4); - }); - }(t3)); - s5.filter(Boolean).length > 0 ? yield Promise.all(s5) : e4 && console.warn(`[swup] No CSS animation duration defined on elements matching \`${e4}\``); - }); - } - function A(t2, e4) { - return (t2[e4] || "").split(", "); - } - function H(t2, e4) { - for (; t2.length < e4.length; ) - t2 = t2.concat(t2); - return Math.max(...e4.map((e5, i5) => k(e5) + k(t2[i5]))); - } - function q(t2, e4 = {}, s5 = {}) { - if ("string" != typeof t2) - throw new Error("swup.navigate() requires a URL parameter"); - if (this.shouldIgnoreVisit(t2, { el: s5.el, event: s5.event })) - return void window.location.assign(t2); - const { url: n5, hash: o5 } = l.fromUrl(t2), r5 = this.createVisit(i({}, s5, { to: n5, hash: o5 })); - this.performNavigation(r5, e4); - } - function V(_0) { - return __async(this, arguments, function* (t2, e4 = {}) { - if (this.navigating) { - if (this.visit.state >= 6) - return t2.state = 2, void (this.onVisitEnd = () => this.performNavigation(t2, e4)); - yield this.hooks.call("visit:abort", this.visit, void 0), this.visit.state = 8; - } - this.navigating = true, this.visit = t2; - const { el: i5 } = t2.trigger; - e4.referrer = e4.referrer || this.currentPageUrl, false === e4.animate && (t2.animation.animate = false), t2.animation.animate || this.classes.clear(); - const a4 = e4.history || (null == i5 ? void 0 : i5.getAttribute("data-swup-history")) || void 0; - a4 && ["push", "replace"].includes(a4) && (t2.history.action = a4); - const l4 = e4.animation || (null == i5 ? void 0 : i5.getAttribute("data-swup-animation")) || void 0; - var h4, c4; - l4 && (t2.animation.name = l4), "object" == typeof e4.cache ? (t2.cache.read = null != (h4 = e4.cache.read) ? h4 : t2.cache.read, t2.cache.write = null != (c4 = e4.cache.write) ? c4 : t2.cache.write) : void 0 !== e4.cache && (t2.cache = { read: !!e4.cache, write: !!e4.cache }), delete e4.cache; - try { - yield this.hooks.call("visit:start", t2, void 0), t2.state = 3; - const i6 = this.hooks.call("page:load", t2, { options: e4 }, (t3, e5) => __async(this, null, function* () { - let i7; - return t3.cache.read && (i7 = this.cache.get(t3.to.url)), e5.page = i7 || (yield this.fetchPage(t3.to.url, e5.options)), e5.cache = !!i7, e5.page; - })); - if (i6.then(({ html: e5 }) => { - t2.advance(5), t2.to.html = e5; - }), !t2.history.popstate) { - const e5 = t2.to.url + t2.to.hash; - "replace" === t2.history.action || t2.to.url === this.currentPageUrl ? r(e5) : (this.currentHistoryIndex++, o(e5, { index: this.currentHistoryIndex })); - } - if (this.currentPageUrl = n(), t2.history.popstate && this.classes.add("is-popstate"), t2.animation.name && this.classes.add(`to-${s(t2.animation.name)}`), t2.animation.wait && (yield i6), t2.done) - return; - if (yield this.hooks.call("visit:transition", t2, void 0, () => __async(this, null, function* () { - if (!t2.animation.animate) - return yield this.hooks.call("animation:skip", void 0), void (yield this.renderPage(t2, yield i6)); - t2.advance(4), yield this.animatePageOut(t2), t2.animation.native && document.startViewTransition ? yield document.startViewTransition(() => __async(this, null, function* () { - return yield this.renderPage(t2, yield i6); - })).finished : yield this.renderPage(t2, yield i6), yield this.animatePageIn(t2); - })), t2.done) - return; - yield this.hooks.call("visit:end", t2, void 0, () => this.classes.clear()), t2.state = 7, this.navigating = false, this.onVisitEnd && (this.onVisitEnd(), this.onVisitEnd = void 0); - } catch (e5) { - if (!e5 || null != e5 && e5.aborted) - return void (t2.state = 8); - t2.state = 9, console.error(e5), this.options.skipPopStateHandling = () => (window.location.assign(t2.to.url + t2.to.hash), true), window.history.back(); - } - }); - } - var I = function(t2) { - return __async(this, null, function* () { - yield this.hooks.call("animation:out:start", t2, void 0, () => { - this.classes.add("is-changing", "is-animating", "is-leaving"); - }), yield this.hooks.call("animation:out:await", t2, { skip: false }, (t3, { skip: e4 }) => { - if (!e4) - return this.awaitAnimations({ selector: t3.animation.selector }); - }), yield this.hooks.call("animation:out:end", t2, void 0); - }); - }; - var L = function({ html: t2 }, { containers: e4 } = this.options) { - var i5; - const s5 = new DOMParser().parseFromString(t2, "text/html"), n5 = (null == (i5 = s5.querySelector("title")) ? void 0 : i5.innerText) || ""; - document.title = n5; - const o5 = m('[data-swup-persist]:not([data-swup-persist=""])'), r5 = e4.map((t3) => { - const e5 = document.querySelector(t3), i6 = s5.querySelector(t3); - return e5 && i6 ? (e5.replaceWith(i6), true) : (e5 || console.warn(`[swup] Container missing in current document: ${t3}`), i6 || console.warn(`[swup] Container missing in incoming document: ${t3}`), false); - }).filter(Boolean); - return o5.forEach((t3) => { - const e5 = t3.getAttribute("data-swup-persist"), i6 = p(`[data-swup-persist="${e5}"]`); - i6 && i6 !== t3 && i6.replaceWith(t3); - }), r5.length === e4.length; - }; - var R = function(t2) { - const e4 = { behavior: "auto" }, { target: s5, reset: n5 } = t2.scroll, o5 = null != s5 ? s5 : t2.to.hash; - let r5 = false; - return o5 && (r5 = this.hooks.callSync("scroll:anchor", t2, { hash: o5, options: e4 }, (t3, { hash: e5, options: i5 }) => { - const s6 = this.getAnchorElement(e5); - return s6 && s6.scrollIntoView(i5), !!s6; - })), n5 && !r5 && (r5 = this.hooks.callSync("scroll:top", t2, { options: e4 }, (t3, { options: e5 }) => (window.scrollTo(i({ top: 0, left: 0 }, e5)), true))), r5; - }; - var T = function(t2) { - return __async(this, null, function* () { - if (t2.done) - return; - const e4 = this.hooks.call("animation:in:await", t2, { skip: false }, (t3, { skip: e5 }) => { - if (!e5) - return this.awaitAnimations({ selector: t3.animation.selector }); - }); - yield w(), yield this.hooks.call("animation:in:start", t2, void 0, () => { - this.classes.remove("is-animating"); - }), yield e4, yield this.hooks.call("animation:in:end", t2, void 0); - }); - }; - var N = function(t2, e4) { - return __async(this, null, function* () { - if (t2.done) - return; - t2.advance(6); - const { url: i5 } = e4; - this.isSameResolvedUrl(n(), i5) || (r(i5), this.currentPageUrl = n(), t2.to.url = this.currentPageUrl), yield this.hooks.call("content:replace", t2, { page: e4 }, (t3, { page: e5 }) => { - if (this.classes.remove("is-leaving"), t3.animation.animate && this.classes.add("is-rendering"), !this.replaceContent(e5, { containers: t3.containers })) - throw new Error("[swup] Container mismatch, aborting"); - t3.animation.animate && (this.classes.add("is-changing", "is-animating", "is-rendering"), t3.animation.name && this.classes.add(`to-${s(t3.animation.name)}`)); - }), yield this.hooks.call("content:scroll", t2, void 0, () => this.scrollToContent(t2)), yield this.hooks.call("page:view", t2, { url: this.currentPageUrl, title: document.title }); - }); - }; - var O = function(t2) { - var e4; - if (e4 = t2, Boolean(null == e4 ? void 0 : e4.isSwupPlugin)) { - if (t2.swup = this, !t2._checkRequirements || t2._checkRequirements()) - return t2._beforeMount && t2._beforeMount(), t2.mount(), this.plugins.push(t2), this.plugins; - } else - console.error("Not a swup plugin instance", t2); - }; - function D(t2) { - const e4 = this.findPlugin(t2); - if (e4) - return e4.unmount(), e4._afterUnmount && e4._afterUnmount(), this.plugins = this.plugins.filter((t3) => t3 !== e4), this.plugins; - console.error("No such plugin", e4); - } - function M(t2) { - return this.plugins.find((e4) => e4 === t2 || e4.name === t2 || e4.name === `Swup${String(t2)}`); - } - function W(t2) { - if ("function" != typeof this.options.resolveUrl) - return console.warn("[swup] options.resolveUrl expects a callback function."), t2; - const e4 = this.options.resolveUrl(t2); - return e4 && "string" == typeof e4 ? e4.startsWith("//") || e4.startsWith("http") ? (console.warn("[swup] options.resolveUrl needs to return a relative url"), t2) : e4 : (console.warn("[swup] options.resolveUrl needs to return a url"), t2); - } - function j(t2, e4) { - return this.resolveUrl(t2) === this.resolveUrl(e4); - } - var B = { animateHistoryBrowsing: false, animationSelector: '[class*="transition-"]', animationScope: "html", cache: true, containers: ["#swup"], ignoreVisit: (t2, { el: e4 } = {}) => !(null == e4 || !e4.closest("[data-no-swup]")), linkSelector: "a[href]", linkToSelf: "scroll", native: false, plugins: [], resolveUrl: (t2) => t2, requestHeaders: { "X-Requested-With": "swup", Accept: "text/html, application/xhtml+xml" }, skipPopStateHandling: (t2) => { - var e4; - return "swup" !== (null == (e4 = t2.state) ? void 0 : e4.source); - }, timeout: 0 }; - var _ = class { - constructor(t2 = {}) { - var e4, s5; - this.version = "4.5.1", this.options = void 0, this.defaults = B, this.plugins = [], this.visit = void 0, this.cache = void 0, this.hooks = void 0, this.classes = void 0, this.currentPageUrl = n(), this.currentHistoryIndex = void 0, this.clickDelegate = void 0, this.navigating = false, this.onVisitEnd = void 0, this.use = O, this.unuse = D, this.findPlugin = M, this.log = () => { - }, this.navigate = q, this.performNavigation = V, this.createVisit = E, this.delegateEvent = a, this.fetchPage = u, this.awaitAnimations = x, this.renderPage = N, this.replaceContent = L, this.animatePageIn = T, this.animatePageOut = I, this.scrollToContent = R, this.getAnchorElement = U, this.getCurrentUrl = n, this.resolveUrl = W, this.isSameResolvedUrl = j, this.options = i({}, this.defaults, t2), this.handleLinkClick = this.handleLinkClick.bind(this), this.handlePopState = this.handlePopState.bind(this), this.cache = new d(this), this.classes = new b(this), this.hooks = new P(this), this.visit = this.createVisit({ to: "" }), this.currentHistoryIndex = null != (e4 = null == (s5 = window.history.state) ? void 0 : s5.index) ? e4 : 1, this.checkRequirements() && this.enable(); - } - checkRequirements() { - return "undefined" != typeof Promise || (console.warn("Promise is not supported"), false); - } - enable() { - return __async(this, null, function* () { - var t2; - const { linkSelector: e4 } = this.options; - this.clickDelegate = this.delegateEvent(e4, "click", this.handleLinkClick), window.addEventListener("popstate", this.handlePopState), this.options.animateHistoryBrowsing && (window.history.scrollRestoration = "manual"), this.options.native = this.options.native && !!document.startViewTransition, this.options.plugins.forEach((t3) => this.use(t3)), "swup" !== (null == (t2 = window.history.state) ? void 0 : t2.source) && r(null, { index: this.currentHistoryIndex }), yield w(), yield this.hooks.call("enable", void 0, void 0, () => { - const t3 = document.documentElement; - t3.classList.add("swup-enabled"), t3.classList.toggle("swup-native", this.options.native); - }); - }); - } - destroy() { - return __async(this, null, function* () { - this.clickDelegate.destroy(), window.removeEventListener("popstate", this.handlePopState), this.cache.clear(), this.options.plugins.forEach((t2) => this.unuse(t2)), yield this.hooks.call("disable", void 0, void 0, () => { - const t2 = document.documentElement; - t2.classList.remove("swup-enabled"), t2.classList.remove("swup-native"); - }), this.hooks.clear(); - }); - } - shouldIgnoreVisit(t2, { el: e4, event: i5 } = {}) { - const { origin: s5, url: n5, hash: o5 } = l.fromUrl(t2); - return s5 !== window.location.origin || !(!e4 || !this.triggerWillOpenNewWindow(e4)) || !!this.options.ignoreVisit(n5 + o5, { el: e4, event: i5 }); - } - handleLinkClick(t2) { - const e4 = t2.delegateTarget, { href: i5, url: s5, hash: n5 } = l.fromElement(e4); - if (this.shouldIgnoreVisit(i5, { el: e4, event: t2 })) - return; - if (this.navigating && s5 === this.visit.to.url) - return void t2.preventDefault(); - const o5 = this.createVisit({ to: s5, hash: n5, el: e4, event: t2 }); - t2.metaKey || t2.ctrlKey || t2.shiftKey || t2.altKey ? this.hooks.callSync("link:newtab", o5, { href: i5 }) : 0 === t2.button && this.hooks.callSync("link:click", o5, { el: e4, event: t2 }, () => { - var e5; - const i6 = null != (e5 = o5.from.url) ? e5 : ""; - t2.preventDefault(), s5 && s5 !== i6 ? this.isSameResolvedUrl(s5, i6) || this.performNavigation(o5) : n5 ? this.hooks.callSync("link:anchor", o5, { hash: n5 }, () => { - r(s5 + n5), this.scrollToContent(o5); - }) : this.hooks.callSync("link:self", o5, void 0, () => { - "navigate" === this.options.linkToSelf ? this.performNavigation(o5) : (r(s5), this.scrollToContent(o5)); - }); - }); - } - handlePopState(t2) { - var e4, i5, s5, o5; - const r5 = null != (e4 = null == (i5 = t2.state) ? void 0 : i5.url) ? e4 : window.location.href; - if (this.options.skipPopStateHandling(t2)) - return; - if (this.isSameResolvedUrl(n(), this.currentPageUrl)) - return; - const { url: a4, hash: h4 } = l.fromUrl(r5), c4 = this.createVisit({ to: a4, hash: h4, event: t2 }); - c4.history.popstate = true; - const u3 = null != (s5 = null == (o5 = t2.state) ? void 0 : o5.index) ? s5 : 0; - u3 && u3 !== this.currentHistoryIndex && (c4.history.direction = u3 - this.currentHistoryIndex > 0 ? "forwards" : "backwards", this.currentHistoryIndex = u3), c4.animation.animate = false, c4.scroll.reset = false, c4.scroll.target = false, this.options.animateHistoryBrowsing && (c4.animation.animate = true, c4.scroll.reset = true), this.hooks.callSync("history:popstate", c4, { event: t2 }, () => { - this.performNavigation(c4); - }); - } - triggerWillOpenNewWindow(t2) { - return !!t2.matches('[download], [target="_blank"]'); - } - }; - - // node_modules/@swup/plugin/dist/index.modern.js - function r2() { - return r2 = Object.assign ? Object.assign.bind() : function(r5) { - for (var n5 = 1; n5 < arguments.length; n5++) { - var e4 = arguments[n5]; - for (var t2 in e4) - Object.prototype.hasOwnProperty.call(e4, t2) && (r5[t2] = e4[t2]); - } - return r5; - }, r2.apply(this, arguments); - } - var n2 = (r5) => String(r5).split(".").map((r6) => String(parseInt(r6 || "0", 10))).concat(["0", "0"]).slice(0, 3).join("."); - var e = class { - constructor() { - this.isSwupPlugin = true, this.swup = void 0, this.version = void 0, this.requires = {}, this.handlersToUnregister = []; - } - mount() { - } - unmount() { - this.handlersToUnregister.forEach((r5) => r5()), this.handlersToUnregister = []; - } - _beforeMount() { - if (!this.name) - throw new Error("You must define a name of plugin when creating a class."); - } - _afterUnmount() { - } - _checkRequirements() { - return "object" != typeof this.requires || Object.entries(this.requires).forEach(([r5, e4]) => { - if (!function(r6, e5, t2) { - const s5 = function(r7, n5) { - var e6; - if ("swup" === r7) - return null != (e6 = n5.version) ? e6 : ""; - { - var t3; - const e7 = n5.findPlugin(r7); - return null != (t3 = null == e7 ? void 0 : e7.version) ? t3 : ""; - } - }(r6, t2); - return !!s5 && ((r7, e6) => e6.every((e7) => { - const [, t3, s6] = e7.match(/^([\D]+)?(.*)$/) || []; - var o5, i5; - return ((r8, n5) => { - const e8 = { "": (r9) => 0 === r9, ">": (r9) => r9 > 0, ">=": (r9) => r9 >= 0, "<": (r9) => r9 < 0, "<=": (r9) => r9 <= 0 }; - return (e8[n5] || e8[""])(r8); - })((i5 = s6, o5 = n2(o5 = r7), i5 = n2(i5), o5.localeCompare(i5, void 0, { numeric: true })), t3 || ">="); - }))(s5, e5); - }(r5, e4 = Array.isArray(e4) ? e4 : [e4], this.swup)) { - const n5 = `${r5} ${e4.join(", ")}`; - throw new Error(`Plugin version mismatch: ${this.name} requires ${n5}`); - } - }), true; - } - on(r5, n5, e4 = {}) { - var t2; - n5 = !(t2 = n5).name.startsWith("bound ") || t2.hasOwnProperty("prototype") ? n5.bind(this) : n5; - const s5 = this.swup.hooks.on(r5, n5, e4); - return this.handlersToUnregister.push(s5), s5; - } - once(n5, e4, t2 = {}) { - return this.on(n5, e4, r2({}, t2, { once: true })); - } - before(n5, e4, t2 = {}) { - return this.on(n5, e4, r2({}, t2, { before: true })); - } - replace(n5, e4, t2 = {}) { - return this.on(n5, e4, r2({}, t2, { replace: true })); - } - off(r5, n5) { - return this.swup.hooks.off(r5, n5); - } - }; - - // node_modules/@swup/fragment-plugin/dist/index.modern.js - function o2() { - return o2 = Object.assign ? Object.assign.bind() : function(t2) { - for (var r5 = 1; r5 < arguments.length; r5++) { - var e4 = arguments[r5]; - for (var n5 in e4) - Object.prototype.hasOwnProperty.call(e4, n5) && (t2[n5] = e4[n5]); - } - return t2; - }, o2.apply(this, arguments); - } - window.process || (window.process = {}), window.process.env || (window.process.env = {}); - var s2 = ["test"].includes(String("development")); - var i2 = ["development", "test"].includes(String("development")); - var a2 = (t2, r5, e4) => null == t2 ? t2 : `\x1B[${r5}m${String(t2)}\x1B[${e4}m`; - var l2 = (t2) => s2 ? t2 : `\u{1F9E9} ${((t3) => a2(t3, 1, 22))(t2)}`; - var u2 = (t2) => s2 ? t2 : ((t3) => a2(t3, 94, 39))(t2); - var c2 = class { - log(...t2) { - const r5 = t2.shift(); - console.log(l2(r5), ...t2); - } - warn(...t2) { - const r5 = t2.shift(); - console.warn(l2(r5), ...t2); - } - error(...t2) { - const r5 = t2.shift(); - console.error(l2(r5), ...t2); - } - logIf(t2, ...r5) { - t2 && this.log(...r5); - } - warnIf(t2, ...r5) { - t2 && this.warn(...r5); - } - errorIf(t2, ...r5) { - t2 && this.error(...r5); - } - }; - var g2 = (t2) => { - !function({ parsedRules: t3, swup: e4, logger: n5 }) { - const o5 = e4.getCurrentUrl(); - t3.filter((t4) => t4.matchesFrom(o5) || t4.matchesTo(o5)).forEach((t4) => { - t4.containers.forEach((t5) => { - const s5 = y2(`${t5}:not([data-swup-fragment])`, e4); - if (!s5) - return; - const a4 = s5.getAttribute("data-swup-fragment-url"); - a4 && i2 && (null == n5 || n5.log(`fragment url ${u2(a4)} for ${u2(t5)} provided by server`)); - const { url: l4 } = l.fromUrl(a4 || o5); - s5.setAttribute("data-swup-fragment", ""), s5.__swupFragment = { url: l4, selector: t5 }; - }); - }); - }(t2), function({ logger: t3, swup: r5 }) { - const e4 = "data-swup-link-to-fragment"; - document.querySelectorAll(`a[${e4}]`).forEach((n5) => { - var o5; - const s5 = n5.getAttribute(e4); - if (!s5) - return void (i2 && (null == t3 || t3.warn(`[${e4}] needs to contain a valid fragment selector`))); - const a4 = y2(s5, r5); - if (!a4) - return void (i2 && (null == t3 || t3.log(`ignoring ${u2(`[${e4}="${s5}"]`)} as ${u2(s5)} is missing`))); - const l4 = null == (o5 = a4.__swupFragment) ? void 0 : o5.url; - l4 ? m2(l4, r5.getCurrentUrl()) ? i2 && (null == t3 || t3.warn(`The fragment URL of ${s5} is identical to the current URL. This could mean that [data-swup-fragment-url] needs to be provided by the server.`)) : n5.href = l4 : i2 && (null == t3 || t3.warn(`no fragment infos found on ${s5}`)); - }); - }(t2), function({ logger: t3 }) { - document.querySelectorAll("dialog[data-swup-fragment]").forEach((r5) => { - r5.__swupFragment ? r5.__swupFragment.modalShown || (r5.__swupFragment.modalShown = true, r5.removeAttribute("open"), null == r5.showModal || r5.showModal(), r5.addEventListener("keydown", (t4) => "Escape" === t4.key && t4.preventDefault())) : i2 && (null == t3 || t3.warn("fragment properties missing on element:", r5)); - }); - }(t2); - }; - var f2 = (t2, r5) => { - var e4; - const n5 = null == (e4 = t2.__swupFragment) ? void 0 : e4.url; - return !!n5 && m2(n5, r5); - }; - var m2 = (t2, r5) => h2(t2) === h2(r5); - var h2 = (t2) => { - if (!t2.trim()) - return t2; - const e4 = l.fromUrl(t2); - return e4.searchParams.sort(), e4.pathname.replace(/\/+$/g, "") + e4.search; - }; - var p2 = (t2) => { - const r5 = t2.from.url, e4 = t2.to.url; - if (r5 && e4) - return { from: r5, to: e4 }; - }; - var d2 = (t2, r5) => { - if (null == t2 || !t2.name) - return; - const { name: e4, containers: n5 } = t2; - n5.forEach((t3) => { - var n6; - null == (n6 = document.querySelector(t3)) || n6.classList.toggle(`to-${e4}`, r5); - }); - }; - var w2 = (t2, r5) => r5.find((r6) => r6.matches(t2)); - function v(t2) { - return !!t2 && t2.containers.every((t3) => { - var r5; - return "template" === (null == (r5 = document.querySelector(t3)) || null == (r5 = r5.tagName) ? void 0 : r5.toLowerCase()); - }); - } - function y2(t2, r5) { - for (const e4 of r5.options.containers) { - const r6 = document.querySelector(e4); - if (null != r6 && r6.matches(t2)) - return r6; - const n5 = null == r6 ? void 0 : r6.querySelector(t2); - if (n5) - return n5; - } - } - function $2(t2) { - if (!Array.isArray(t2)) - throw new Error("cloneRules() expects an array of rules"); - return t2.map((t3) => o2({}, t3, { from: Array.isArray(t3.from) ? [...t3.from] : t3.from, to: Array.isArray(t3.to) ? [...t3.to] : t3.to, containers: [...t3.containers] })); - } - var S2 = class { - constructor(t2) { - var r5, o5; - this.matchesFrom = void 0, this.matchesTo = void 0, this.swup = void 0, this.from = void 0, this.to = void 0, this.containers = void 0, this.name = void 0, this.scroll = false, this.focus = void 0, this.logger = void 0, this.swup = t2.swup, this.logger = t2.logger, this.from = t2.from || "", this.to = t2.to || "", t2.name && (this.name = s(t2.name)), void 0 !== t2.scroll && (this.scroll = t2.scroll), void 0 !== t2.focus && (this.focus = t2.focus), this.containers = this.parseContainers(t2.containers), i2 && (null == (r5 = this.logger) || r5.errorIf(!this.to, "Every fragment rule must contain a 'to' path", this), null == (o5 = this.logger) || o5.errorIf(!this.from, "Every fragment rule must contain a 'from' path", this)), this.matchesFrom = h(this.from), this.matchesTo = h(this.to); - } - parseContainers(t2) { - var r5, e4; - return Array.isArray(t2) && t2.length ? (e4 = t2.map((t3) => t3.trim()), [...new Set(e4)]).filter((t3) => { - var r6; - const e5 = this.validateSelector(t3); - return null == (r6 = this.logger) || r6.errorIf(e5 instanceof Error, e5), true === e5; - }) : (i2 && (null == (r5 = this.logger) || r5.error("Every fragment rule must contain an array of containers", this.getDebugInfo())), []); - } - validateSelector(t2) { - return t2.startsWith("#") ? !t2.match(/\s|>/) || new Error(`fragment selectors must not be nested: ${t2}`) : new Error(`fragment selectors must be IDs: ${t2}`); - } - getDebugInfo() { - const { from: t2, to: r5, containers: e4 } = this; - return { from: String(t2), to: String(r5), containers: String(e4) }; - } - matches(t2) { - const { url: e4 } = l.fromUrl(t2.from), { url: n5 } = l.fromUrl(t2.to); - if (!this.matchesFrom(e4) || !this.matchesTo(n5)) - return false; - for (const t3 of this.containers) { - const r5 = this.validateFragmentSelectorForMatch(t3); - var o5; - if (r5 instanceof Error) - return i2 && (null == (o5 = this.logger) || o5.error(r5, this.getDebugInfo())), false; - } - return true; - } - validateFragmentSelectorForMatch(t2) { - return document.querySelector(t2) ? !!y2(t2, this.swup) || new Error(`skipping rule since ${u2(t2)} is outside of swup's default containers`) : new Error(`skipping rule since ${u2(t2)} doesn't exist in the current document`); - } - }; - var _2 = function(t2) { - const r5 = p2(t2); - r5 && w2(r5, this.parsedRules) && (t2.scroll.reset = false); - }; - var b2 = function(t2) { - return __async(this, null, function* () { - const r5 = p2(t2); - if (!r5) - return; - const e4 = this.getFragmentVisit(r5); - if (!e4) - return; - var n5; - t2.fragmentVisit = e4, i2 && (null == (n5 = this.logger) || n5.log(`fragment visit: ${u2(t2.fragmentVisit.containers.join(", "))}`)), t2.scroll = function(t3, r6) { - return "boolean" == typeof t3.scroll ? o2({}, r6, { reset: t3.scroll }) : "string" != typeof t3.scroll || r6.target ? r6 : o2({}, r6, { target: t3.scroll }); - }(e4, t2.scroll); - const s5 = t2.a11y; - var a4; - void 0 !== e4.focus && (i2 && (null == (a4 = this.logger) || a4.errorIf(!s5, "Can't set visit.a11y.focus. Is @swup/a11y-plugin installed?")), s5 && (s5.focus = e4.focus)), t2.animation.scope = t2.fragmentVisit.containers, t2.containers = t2.fragmentVisit.containers, t2.animation.selector = t2.fragmentVisit.containers.join(","), d2(e4, true); - }); - }; - var R2 = function(t2, r5) { - var e4, n5; - t2.fragmentVisit && v(t2.fragmentVisit) && (i2 && (null == (e4 = this.logger) || e4.log(`${u2("out")}-animation skipped for ${u2(null == (n5 = t2.fragmentVisit) ? void 0 : n5.containers.toString())}`)), r5.skip = true); - }; - var E2 = function(t2, r5) { - var e4, n5; - t2.fragmentVisit && v(t2.fragmentVisit) && (i2 && (null == (e4 = this.logger) || e4.log(`${u2("in")}-animation skipped for ${u2(null == (n5 = t2.fragmentVisit) ? void 0 : n5.containers.toString())}`)), r5.skip = true); - }; - var F = function(t2, r5) { - var e4; - if (t2.trigger.el || !t2.to.url) - return; - const n5 = this.swup.cache.get(t2.to.url); - n5 && n5.fragmentHtml && (r5.page.html = n5.fragmentHtml, i2 && (null == (e4 = this.logger) || e4.log(`fragment cache used for ${u2(t2.to.url)}`))); - }; - var A2 = function(t2) { - d2(t2.fragmentVisit, true), g2(this), (({ swup: t3, logger: r5 }) => { - const e4 = t3.getCurrentUrl(), n5 = t3.cache, s5 = n5.get(e4); - if (!s5) - return; - const a4 = new DOMParser().parseFromString(s5.html, "text/html"), l4 = [], c4 = Array.from(document.querySelectorAll("[data-swup-fragment]")).filter((t4) => !t4.matches("template") && !f2(t4, e4)); - c4.length && (t3.options.cache ? (c4.forEach((t4) => { - var e5, o5; - if (null != t4.querySelector("[data-swup-fragment]")) - return; - const s6 = null == (e5 = t4.__swupFragment) ? void 0 : e5.url; - if (!s6) - return void (i2 && (null == r5 || r5.warn("no fragment url found:", t4))); - const u3 = null == (o5 = t4.__swupFragment) ? void 0 : o5.selector; - if (!u3) - return void (i2 && (null == r5 || r5.warn("no fragment selector found:", t4))); - const c5 = n5.get(s6); - if (!c5) - return; - const g3 = a4.querySelector(u3); - if (!g3) - return; - const f3 = new DOMParser().parseFromString(c5.html, "text/html").querySelector(u3); - f3 && (f3.setAttribute("data-swup-fragment-url", s6), g3.replaceWith(f3), l4.push(t4)); - }), l4.length && (n5.update(e4, o2({}, s5, { fragmentHtml: a4.documentElement.outerHTML })), l4.forEach((t4) => { - var e5, n6; - const o5 = (null == (e5 = t4.__swupFragment) ? void 0 : e5.url) || "", s6 = (null == (n6 = t4.__swupFragment) ? void 0 : n6.selector) || ""; - i2 && (null == r5 || r5.log(`updated cache with ${u2(s6)} from ${u2(o5)}`)); - }))) : i2 && (null == r5 || r5.warn("can't cache foreign fragment elements without swup's cache"))); - })(this); - }; - var V2 = function(t2) { - d2(t2.fragmentVisit, false); - }; - var q2 = class extends e { - get parsedRules() { - return this._parsedRules; - } - constructor(t2) { - super(), this.name = "SwupFragmentPlugin", this.requires = { swup: ">=4" }, this._rawRules = [], this._parsedRules = [], this.options = void 0, this.defaults = { rules: [], debug: false }, this.logger = void 0, this.options = o2({}, this.defaults, t2); - } - mount() { - const t2 = this.swup; - var r5; - this.setRules(this.options.rules), i2 && this.options.debug && (this.logger = new c2()), this.before("link:self", _2), this.on("visit:start", b2), this.before("animation:out:await", R2), this.before("animation:in:await", E2), this.before("content:replace", F), this.on("content:replace", A2), this.on("visit:end", V2), i2 && (null == (r5 = this.logger) || r5.warnIf(!t2.options.cache, "fragment caching will only work with swup's cache being active")), g2(this); - } - unmount() { - super.unmount(), document.querySelectorAll("[data-swup-fragment]").forEach((t2) => { - t2.removeAttribute("data-swup-fragment-url"), delete t2.__swupFragment; - }); - } - setRules(t2) { - var r5; - this._rawRules = $2(t2), this._parsedRules = t2.map((t3) => this.parseRule(t3)), i2 && (null == (r5 = this.logger) || r5.log("Updated fragment rules", this.getRules())); - } - getRules() { - return $2(this._rawRules); - } - prependRule(t2) { - this.setRules([t2, ...this.getRules()]); - } - appendRule(t2) { - this.setRules([...this.getRules(), t2]); - } - parseRule({ from: t2, to: r5, containers: e4, name: n5, scroll: o5, focus: s5 }) { - return new S2({ from: t2, to: r5, containers: e4, name: n5, scroll: o5, focus: s5, logger: this.logger, swup: this.swup }); - } - getFragmentVisit(t2) { - const r5 = w2(t2, this.parsedRules); - if (!r5) - return; - const e4 = ((t3, r6, e5, n6) => { - const o6 = m2(t3.from, t3.to); - return r6.filter((r7) => { - const s6 = document.querySelector(r7); - return s6 ? y2(r7, e5) ? !(!o6 && f2(s6, t3.to) && (i2 && (null == n6 || n6.log(`ignoring fragment ${u2(r7)} as it already matches the current URL`)), 1)) : (i2 && (null == n6 || n6.error(`${u2(r7)} is outside of swup's default containers`)), false) : (i2 && (null == n6 || n6.log(`${u2(r7)} missing in current document`)), false); - }); - })(t2, r5.containers, this.swup, this.logger); - if (!e4.length) - return; - const { name: n5, scroll: o5, focus: s5 } = r5; - return { containers: e4, name: n5, scroll: o5, focus: s5 }; - } - }; - - // assets/scripts/modules/Load.js - var Load_default = class extends _default { - constructor(m3) { - super(m3); - } - init() { - const load = new _({ - containers: ["[data-load-container]"], - // cache: false, - plugins: [ - new q2({ - rules: [ - { - from: ["/", "/index.php", "/index.php/per_page/:per_page/page/:page"], - to: ["/", "/index.php", "/index.php/per_page/:per_page/page/:page"], - containers: ["#paginated"] - }, - { - from: ["/", "/index.php", "/index.php/per_page/:per_page/page/:page"], - to: ["/index.php/modal/:modal"], - containers: ["#modal"], - name: "open-modal" - }, - { - from: ["/index.php/modal/:modal"], - to: ["/index.php/modal/:modal"], - containers: ["#modal"], - name: "modal-update" - }, - { - from: ["/index.php/modal/:modal"], - to: ["/", "/index.php", "/index.php/per_page/:per_page/page/:page"], - containers: ["#modal", "#paginated"], - name: "close-modal" - } - ] - }) - ] - }); - load.hooks.before("content:replace", (visit) => __async(this, null, function* () { - console.log("before content replace:", visit); - for (let container of visit.containers) { - const oldContainer = this.el.querySelector(container); - console.log("old container: ", oldContainer); - this.call("destroy", oldContainer, "app"); - } - })); - load.hooks.on("content:replace", (visit) => { - console.log("On content replace:", visit); - if (visit.fragmentVisit) { - if (visit.fragmentVisit.name == "open-modal") { - this.call("populate", document.getElementById("modal"), "Dialog"); - this.call("show", null, "Dialog"); - } else if (visit.fragmentVisit.name == "close-modal") { - this.call("close", null, "Dialog"); - } - } - for (let container of visit.containers) { - const newContainer = this.el.querySelector(container); - console.log("new container: ", newContainer); - newContainer.classList.add("transition-fade"); - this.call("update", newContainer, "app"); - } - }); - console.log(this, load); - } - }; - - // assets/scripts/config.js - var NODE_ENV = "development"; - var IS_MOBILE = window.matchMedia("(any-pointer:coarse)").matches; - var ENV = Object.freeze({ - // Node environment - NAME: NODE_ENV, - IS_PROD: NODE_ENV === "production", - IS_DEV: NODE_ENV === "development", - // Device - IS_MOBILE, - IS_DESKTOP: !IS_MOBILE - }); - var CSS_CLASS = Object.freeze({ - LOADING: "is-loading", - LOADED: "is-loaded", - READY: "is-ready", - FONTS_LOADED: "fonts-loaded", - LAZY_CONTAINER: "c-lazy", - LAZY_LOADED: "-lazy-loaded" - // ... - }); - var CUSTOM_EVENT = Object.freeze({ - RESIZE_END: "loco.resizeEnd" - // ... - }); - var FONT = Object.freeze({ - EAGER: [ - { family: "Source Sans", style: "normal", weight: 400 }, - { family: "Source Sans", style: "normal", weight: 700 } - ] - }); - - // assets/scripts/utils/image.js - var getImageMetadata = ($img) => ({ - url: $img.src, - width: $img.naturalWidth, - height: $img.naturalHeight, - ratio: $img.naturalWidth / $img.naturalHeight - }); - var loadImage = (url, options = {}) => { - return new Promise((resolve, reject) => { - const $img = new Image(); - if (options.crossOrigin) { - $img.crossOrigin = options.crossOrigin; - } - const loadCallback = () => { - resolve(__spreadValues({ - element: $img - }, getImageMetadata($img))); - }; - if ($img.decode) { - $img.src = url; - $img.decode().then(loadCallback).catch((e4) => { - reject(e4); - }); - } else { - $img.onload = loadCallback; - $img.onerror = (e4) => { - reject(e4); - }; - $img.src = url; - } - }); - }; - var LAZY_LOADED_IMAGES = []; - var lazyLoadImage = ($el, url, callback) => __async(void 0, null, function* () { - let src = url ? url : $el.dataset.src; - let loadedImage = LAZY_LOADED_IMAGES.find((image) => image.url === src); - if (!loadedImage) { - loadedImage = yield loadImage(src); - if (!loadedImage.url) { - return; - } - LAZY_LOADED_IMAGES.push(loadedImage); - } - if ($el.src === src) { - return; - } - if ($el.tagName === "IMG") { - $el.src = loadedImage.url; - } else { - $el.style.backgroundImage = `url(${loadedImage.url})`; - } - requestAnimationFrame(() => { - let lazyParent = $el.closest(`.${CSS_CLASS.LAZY_CONTAINER}`); - if (lazyParent) { - lazyParent.classList.add(CSS_CLASS.LAZY_LOADED); - lazyParent.style.backgroundImage = ""; - } - $el.classList.add(CSS_CLASS.LAZY_LOADED); - callback == null ? void 0 : callback(); - }); - }); - - // node_modules/@studio-freight/lenis/dist/lenis.modern.mjs - function t() { - return t = Object.assign ? Object.assign.bind() : function(t2) { - for (var i5 = 1; i5 < arguments.length; i5++) { - var e4 = arguments[i5]; - for (var s5 in e4) - Object.prototype.hasOwnProperty.call(e4, s5) && (t2[s5] = e4[s5]); - } - return t2; - }, t.apply(this, arguments); - } - function i3(t2, i5, e4) { - return Math.max(t2, Math.min(i5, e4)); - } - var e2 = class { - advance(t2) { - var e4; - if (!this.isRunning) - return; - let s5 = false; - if (this.lerp) - this.value = (o5 = this.value, n5 = this.to, (1 - (r5 = 1 - Math.exp(-60 * this.lerp * t2))) * o5 + r5 * n5), Math.round(this.value) === this.to && (this.value = this.to, s5 = true); - else { - this.currentTime += t2; - const e5 = i3(0, this.currentTime / this.duration, 1); - s5 = e5 >= 1; - const o6 = s5 ? 1 : this.easing(e5); - this.value = this.from + (this.to - this.from) * o6; - } - var o5, n5, r5; - null == (e4 = this.onUpdate) || e4.call(this, this.value, s5), s5 && this.stop(); - } - stop() { - this.isRunning = false; - } - fromTo(t2, i5, { lerp: e4 = 0.1, duration: s5 = 1, easing: o5 = (t3) => t3, onStart: n5, onUpdate: r5 }) { - this.from = this.value = t2, this.to = i5, this.lerp = e4, this.duration = s5, this.easing = o5, this.currentTime = 0, this.isRunning = true, null == n5 || n5(), this.onUpdate = r5; - } - }; - var s3 = class { - constructor({ wrapper: t2, content: i5, autoResize: e4 = true } = {}) { - if (this.resize = () => { - this.onWrapperResize(), this.onContentResize(); - }, this.onWrapperResize = () => { - this.wrapper === window ? (this.width = window.innerWidth, this.height = window.innerHeight) : (this.width = this.wrapper.clientWidth, this.height = this.wrapper.clientHeight); - }, this.onContentResize = () => { - this.scrollHeight = this.content.scrollHeight, this.scrollWidth = this.content.scrollWidth; - }, this.wrapper = t2, this.content = i5, e4) { - const t3 = function(t4, i6) { - let e5; - return function() { - let i7 = arguments, s5 = this; - clearTimeout(e5), e5 = setTimeout(function() { - t4.apply(s5, i7); - }, 250); - }; - }(this.resize); - this.wrapper !== window && (this.wrapperResizeObserver = new ResizeObserver(t3), this.wrapperResizeObserver.observe(this.wrapper)), this.contentResizeObserver = new ResizeObserver(t3), this.contentResizeObserver.observe(this.content); - } - this.resize(); - } - destroy() { - var t2, i5; - null == (t2 = this.wrapperResizeObserver) || t2.disconnect(), null == (i5 = this.contentResizeObserver) || i5.disconnect(); - } - get limit() { - return { x: this.scrollWidth - this.width, y: this.scrollHeight - this.height }; - } - }; - var o3 = class { - constructor() { - this.events = {}; - } - emit(t2, ...i5) { - let e4 = this.events[t2] || []; - for (let t3 = 0, s5 = e4.length; t3 < s5; t3++) - e4[t3](...i5); - } - on(t2, i5) { - var e4; - return (null == (e4 = this.events[t2]) ? void 0 : e4.push(i5)) || (this.events[t2] = [i5]), () => { - var e5; - this.events[t2] = null == (e5 = this.events[t2]) ? void 0 : e5.filter((t3) => i5 !== t3); - }; - } - off(t2, i5) { - var e4; - this.events[t2] = null == (e4 = this.events[t2]) ? void 0 : e4.filter((t3) => i5 !== t3); - } - destroy() { - this.events = {}; - } - }; - var n3 = class { - constructor(t2, { wheelMultiplier: e4 = 1, touchMultiplier: s5 = 2, normalizeWheel: n5 = false }) { - this.onTouchStart = (t3) => { - const { clientX: i5, clientY: e5 } = t3.targetTouches ? t3.targetTouches[0] : t3; - this.touchStart.x = i5, this.touchStart.y = e5, this.lastDelta = { x: 0, y: 0 }; - }, this.onTouchMove = (t3) => { - const { clientX: i5, clientY: e5 } = t3.targetTouches ? t3.targetTouches[0] : t3, s6 = -(i5 - this.touchStart.x) * this.touchMultiplier, o5 = -(e5 - this.touchStart.y) * this.touchMultiplier; - this.touchStart.x = i5, this.touchStart.y = e5, this.lastDelta = { x: s6, y: o5 }, this.emitter.emit("scroll", { deltaX: s6, deltaY: o5, event: t3 }); - }, this.onTouchEnd = (t3) => { - this.emitter.emit("scroll", { deltaX: this.lastDelta.x, deltaY: this.lastDelta.y, event: t3 }); - }, this.onWheel = (t3) => { - let { deltaX: e5, deltaY: s6 } = t3; - this.normalizeWheel && (e5 = i3(-100, e5, 100), s6 = i3(-100, s6, 100)), e5 *= this.wheelMultiplier, s6 *= this.wheelMultiplier, this.emitter.emit("scroll", { deltaX: e5, deltaY: s6, event: t3 }); - }, this.element = t2, this.wheelMultiplier = e4, this.touchMultiplier = s5, this.normalizeWheel = n5, this.touchStart = { x: null, y: null }, this.emitter = new o3(), this.element.addEventListener("wheel", this.onWheel, { passive: false }), this.element.addEventListener("touchstart", this.onTouchStart, { passive: false }), this.element.addEventListener("touchmove", this.onTouchMove, { passive: false }), this.element.addEventListener("touchend", this.onTouchEnd, { passive: false }); - } - on(t2, i5) { - return this.emitter.on(t2, i5); - } - destroy() { - this.emitter.destroy(), this.element.removeEventListener("wheel", this.onWheel, { passive: false }), this.element.removeEventListener("touchstart", this.onTouchStart, { passive: false }), this.element.removeEventListener("touchmove", this.onTouchMove, { passive: false }), this.element.removeEventListener("touchend", this.onTouchEnd, { passive: false }); - } - }; - var r3 = class { - constructor({ wrapper: i5 = window, content: r5 = document.documentElement, wheelEventsTarget: l4 = i5, eventsTarget: h4 = l4, smoothWheel: a4 = true, smoothTouch: c4 = false, syncTouch: u3 = false, syncTouchLerp: p3 = 0.1, __iosNoInertiaSyncTouchLerp: d3 = 0.4, touchInertiaMultiplier: m3 = 35, duration: g3, easing: v2 = (t2) => Math.min(1, 1.001 - Math.pow(2, -10 * t2)), lerp: S3 = !g3 && 0.1, infinite: w3 = false, orientation: f3 = "vertical", gestureOrientation: y3 = "vertical", touchMultiplier: T2 = 1, wheelMultiplier: z = 1, normalizeWheel: M2 = false, autoResize: L2 = true } = {}) { - this.onVirtualScroll = ({ deltaX: i6, deltaY: e4, event: s5 }) => { - if (s5.ctrlKey) - return; - const o5 = s5.type.includes("touch"), n5 = s5.type.includes("wheel"); - if ("both" === this.options.gestureOrientation && 0 === i6 && 0 === e4 || "vertical" === this.options.gestureOrientation && 0 === e4 || "horizontal" === this.options.gestureOrientation && 0 === i6 || o5 && "vertical" === this.options.gestureOrientation && 0 === this.scroll && !this.options.infinite && e4 <= 0) - return; - let r6 = s5.composedPath(); - if (r6 = r6.slice(0, r6.indexOf(this.rootElement)), r6.find((t2) => { - var i7; - return (null == t2.hasAttribute ? void 0 : t2.hasAttribute("data-lenis-prevent")) || o5 && (null == t2.hasAttribute ? void 0 : t2.hasAttribute("data-lenis-prevent-touch")) || n5 && (null == t2.hasAttribute ? void 0 : t2.hasAttribute("data-lenis-prevent-wheel")) || (null == (i7 = t2.classList) ? void 0 : i7.contains("lenis")); - })) - return; - if (this.isStopped || this.isLocked) - return void s5.preventDefault(); - if (this.isSmooth = (this.options.smoothTouch || this.options.syncTouch) && o5 || this.options.smoothWheel && n5, !this.isSmooth) - return this.isScrolling = false, void this.animate.stop(); - s5.preventDefault(); - let l5 = e4; - "both" === this.options.gestureOrientation ? l5 = Math.abs(e4) > Math.abs(i6) ? e4 : i6 : "horizontal" === this.options.gestureOrientation && (l5 = i6); - const h5 = o5 && this.options.syncTouch, a5 = o5 && "touchend" === s5.type && Math.abs(l5) > 1; - a5 && (l5 = this.velocity * this.options.touchInertiaMultiplier), this.scrollTo(this.targetScroll + l5, t({ programmatic: false }, h5 && { lerp: a5 ? this.syncTouchLerp : this.options.__iosNoInertiaSyncTouchLerp })); - }, this.onScroll = () => { - if (!this.isScrolling) { - const t2 = this.animatedScroll; - this.animatedScroll = this.targetScroll = this.actualScroll, this.velocity = 0, this.direction = Math.sign(this.animatedScroll - t2), this.emit(); - } - }, window.lenisVersion = "1.0.27", i5 !== document.documentElement && i5 !== document.body || (i5 = window), this.options = { wrapper: i5, content: r5, wheelEventsTarget: l4, eventsTarget: h4, smoothWheel: a4, smoothTouch: c4, syncTouch: u3, syncTouchLerp: p3, __iosNoInertiaSyncTouchLerp: d3, touchInertiaMultiplier: m3, duration: g3, easing: v2, lerp: S3, infinite: w3, gestureOrientation: y3, orientation: f3, touchMultiplier: T2, wheelMultiplier: z, normalizeWheel: M2, autoResize: L2 }, this.animate = new e2(), this.emitter = new o3(), this.dimensions = new s3({ wrapper: i5, content: r5, autoResize: L2 }), this.toggleClass("lenis", true), this.velocity = 0, this.isLocked = false, this.isStopped = false, this.isSmooth = u3 || a4 || c4, this.isScrolling = false, this.targetScroll = this.animatedScroll = this.actualScroll, this.options.wrapper.addEventListener("scroll", this.onScroll, { passive: false }), this.virtualScroll = new n3(h4, { touchMultiplier: T2, wheelMultiplier: z, normalizeWheel: M2 }), this.virtualScroll.on("scroll", this.onVirtualScroll); - } - destroy() { - this.emitter.destroy(), this.options.wrapper.removeEventListener("scroll", this.onScroll, { passive: false }), this.virtualScroll.destroy(), this.dimensions.destroy(), this.toggleClass("lenis", false), this.toggleClass("lenis-smooth", false), this.toggleClass("lenis-scrolling", false), this.toggleClass("lenis-stopped", false), this.toggleClass("lenis-locked", false); - } - on(t2, i5) { - return this.emitter.on(t2, i5); - } - off(t2, i5) { - return this.emitter.off(t2, i5); - } - setScroll(t2) { - this.isHorizontal ? this.rootElement.scrollLeft = t2 : this.rootElement.scrollTop = t2; - } - resize() { - this.dimensions.resize(); - } - emit() { - this.emitter.emit("scroll", this); - } - reset() { - this.isLocked = false, this.isScrolling = false, this.velocity = 0, this.animate.stop(); - } - start() { - this.isStopped = false, this.reset(); - } - stop() { - this.isStopped = true, this.animate.stop(), this.reset(); - } - raf(t2) { - const i5 = t2 - (this.time || t2); - this.time = t2, this.animate.advance(1e-3 * i5); - } - scrollTo(t2, { offset: e4 = 0, immediate: s5 = false, lock: o5 = false, duration: n5 = this.options.duration, easing: r5 = this.options.easing, lerp: l4 = !n5 && this.options.lerp, onComplete: h4 = null, force: a4 = false, programmatic: c4 = true } = {}) { - if (!this.isStopped && !this.isLocked || a4) { - if (["top", "left", "start"].includes(t2)) - t2 = 0; - else if (["bottom", "right", "end"].includes(t2)) - t2 = this.limit; - else { - var u3; - let i5; - if ("string" == typeof t2 ? i5 = document.querySelector(t2) : null != (u3 = t2) && u3.nodeType && (i5 = t2), i5) { - if (this.options.wrapper !== window) { - const t3 = this.options.wrapper.getBoundingClientRect(); - e4 -= this.isHorizontal ? t3.left : t3.top; - } - const s6 = i5.getBoundingClientRect(); - t2 = (this.isHorizontal ? s6.left : s6.top) + this.animatedScroll; - } - } - if ("number" == typeof t2) { - if (t2 += e4, t2 = Math.round(t2), this.options.infinite ? c4 && (this.targetScroll = this.animatedScroll = this.scroll) : t2 = i3(0, t2, this.limit), s5) - return this.animatedScroll = this.targetScroll = t2, this.setScroll(this.scroll), this.reset(), void (null == h4 || h4(this)); - if (!c4) { - if (t2 === this.targetScroll) - return; - this.targetScroll = t2; - } - this.animate.fromTo(this.animatedScroll, t2, { duration: n5, easing: r5, lerp: l4, onStart: () => { - o5 && (this.isLocked = true), this.isScrolling = true; - }, onUpdate: (t3, i5) => { - this.isScrolling = true, this.velocity = t3 - this.animatedScroll, this.direction = Math.sign(this.velocity), this.animatedScroll = t3, this.setScroll(this.scroll), c4 && (this.targetScroll = t3), i5 || this.emit(), i5 && requestAnimationFrame(() => { - this.reset(), this.emit(), null == h4 || h4(this); - }); - } }); - } - } - } - get rootElement() { - return this.options.wrapper === window ? this.options.content : this.options.wrapper; - } - get limit() { - return this.dimensions.limit[this.isHorizontal ? "x" : "y"]; - } - get isHorizontal() { - return "horizontal" === this.options.orientation; - } - get actualScroll() { - return this.isHorizontal ? this.rootElement.scrollLeft : this.rootElement.scrollTop; - } - get scroll() { - return this.options.infinite ? (this.animatedScroll % (t2 = this.limit) + t2) % t2 : this.animatedScroll; - var t2; - } - get progress() { - return 0 === this.limit ? 1 : this.scroll / this.limit; - } - get isSmooth() { - return this.__isSmooth; - } - set isSmooth(t2) { - this.__isSmooth !== t2 && (this.__isSmooth = t2, this.toggleClass("lenis-smooth", t2)); - } - get isScrolling() { - return this.__isScrolling; - } - set isScrolling(t2) { - this.__isScrolling !== t2 && (this.__isScrolling = t2, this.toggleClass("lenis-scrolling", t2)); - } - get isStopped() { - return this.__isStopped; - } - set isStopped(t2) { - this.__isStopped !== t2 && (this.__isStopped = t2, this.toggleClass("lenis-stopped", t2)); - } - get isLocked() { - return this.__isLocked; - } - set isLocked(t2) { - this.__isLocked !== t2 && (this.__isLocked = t2, this.toggleClass("lenis-locked", t2)); - } - get className() { - let t2 = "lenis"; - return this.isStopped && (t2 += " lenis-stopped"), this.isLocked && (t2 += " lenis-locked"), this.isScrolling && (t2 += " lenis-scrolling"), this.isSmooth && (t2 += " lenis-smooth"), t2; - } - toggleClass(t2, i5) { - this.rootElement.classList.toggle(t2, i5), this.emitter.emit("className change", this); - } - }; - - // node_modules/locomotive-scroll/dist/locomotive-scroll.modern.mjs - function s4() { - return s4 = Object.assign ? Object.assign.bind() : function(t2) { - for (var s5 = 1; s5 < arguments.length; s5++) { - var e4 = arguments[s5]; - for (var i5 in e4) - Object.prototype.hasOwnProperty.call(e4, i5) && (t2[i5] = e4[i5]); - } - return t2; - }, s4.apply(this, arguments); - } - var e3 = class { - constructor({ scrollElements: t2, rootMargin: s5 = "-1px -1px -1px -1px", IORaf: e4 }) { - this.scrollElements = void 0, this.rootMargin = void 0, this.IORaf = void 0, this.observer = void 0, this.scrollElements = t2, this.rootMargin = s5, this.IORaf = e4, this._init(); - } - _init() { - this.observer = new IntersectionObserver((t2) => { - t2.forEach((t3) => { - const s5 = this.scrollElements.find((s6) => s6.$el === t3.target); - t3.isIntersecting ? (s5 && (s5.isAlreadyIntersected = true), this._setInview(t3)) : s5 && s5.isAlreadyIntersected && this._setOutOfView(t3); - }); - }, { rootMargin: this.rootMargin }); - for (const t2 of this.scrollElements) - this.observe(t2.$el); - } - destroy() { - this.observer.disconnect(); - } - observe(t2) { - t2 && this.observer.observe(t2); - } - unobserve(t2) { - t2 && this.observer.unobserve(t2); - } - _setInview(t2) { - const s5 = this.scrollElements.find((s6) => s6.$el === t2.target); - this.IORaf && (null == s5 || s5.setInteractivityOn()), !this.IORaf && (null == s5 || s5.setInview()); - } - _setOutOfView(t2) { - const s5 = this.scrollElements.find((s6) => s6.$el === t2.target); - this.IORaf && (null == s5 || s5.setInteractivityOff()), !this.IORaf && (null == s5 || s5.setOutOfView()), null != s5 && s5.attributes.scrollRepeat || this.IORaf || this.unobserve(t2.target); - } - }; - function i4(t2, s5, e4, i5, r5) { - return e4 + ((r5 - t2) / (s5 - t2) * (i5 - e4) || 0); - } - function r4(t2, s5) { - return t2.reduce((t3, e4) => Math.abs(e4 - s5) < Math.abs(t3 - s5) ? e4 : t3); - } - var l3 = class { - constructor({ $el: t2, id: s5, modularInstance: e4, subscribeElementUpdateFn: i5, unsubscribeElementUpdateFn: r5, needRaf: l4, scrollOrientation: n5 }) { - var o5, a4, c4, h4, d3; - this.$el = void 0, this.id = void 0, this.needRaf = void 0, this.attributes = void 0, this.scrollOrientation = void 0, this.isAlreadyIntersected = void 0, this.intersection = void 0, this.metrics = void 0, this.currentScroll = void 0, this.translateValue = void 0, this.progress = void 0, this.lastProgress = void 0, this.modularInstance = void 0, this.progressModularModules = void 0, this.isInview = void 0, this.isInteractive = void 0, this.isInFold = void 0, this.isFirstResize = void 0, this.subscribeElementUpdateFn = void 0, this.unsubscribeElementUpdateFn = void 0, this.$el = t2, this.id = s5, this.needRaf = l4, this.scrollOrientation = n5, this.modularInstance = e4, this.subscribeElementUpdateFn = i5, this.unsubscribeElementUpdateFn = r5, this.attributes = { scrollClass: null != (o5 = this.$el.dataset.scrollClass) ? o5 : "is-inview", scrollOffset: null != (a4 = this.$el.dataset.scrollOffset) ? a4 : "0,0", scrollPosition: null != (c4 = this.$el.dataset.scrollPosition) ? c4 : "start,end", scrollModuleProgress: null != this.$el.dataset.scrollModuleProgress, scrollCssProgress: null != this.$el.dataset.scrollCssProgress, scrollEventProgress: null != (h4 = this.$el.dataset.scrollEventProgress) ? h4 : null, scrollSpeed: null != this.$el.dataset.scrollSpeed ? parseFloat(this.$el.dataset.scrollSpeed) : null, scrollRepeat: null != this.$el.dataset.scrollRepeat, scrollCall: null != (d3 = this.$el.dataset.scrollCall) ? d3 : null, scrollCallSelf: null != this.$el.dataset.scrollCallSelf, scrollIgnoreFold: null != this.$el.dataset.scrollIgnoreFold, scrollEnableTouchSpeed: null != this.$el.dataset.scrollEnableTouchSpeed }, this.intersection = { start: 0, end: 0 }, this.metrics = { offsetStart: 0, offsetEnd: 0, bcr: {} }, this.currentScroll = "vertical" === this.scrollOrientation ? window.scrollY : window.scrollX, this.translateValue = 0, this.progress = 0, this.lastProgress = null, this.progressModularModules = [], this.isInview = false, this.isInteractive = false, this.isAlreadyIntersected = false, this.isInFold = false, this.isFirstResize = true, this._init(); - } - _init() { - this.needRaf && (this.modularInstance && this.attributes.scrollModuleProgress && this._getProgressModularModules(), this._resize()); - } - onResize({ currentScroll: t2 }) { - this.currentScroll = t2, this._resize(); - } - onRender({ currentScroll: t2, smooth: s5 }) { - const e4 = "vertical" === this.scrollOrientation ? window.innerHeight : window.innerWidth; - if (this.currentScroll = t2, this._computeProgress(), this.attributes.scrollSpeed && !isNaN(this.attributes.scrollSpeed)) - if (this.attributes.scrollEnableTouchSpeed || s5) { - if (this.isInFold) { - const t3 = Math.max(0, this.progress); - this.translateValue = t3 * e4 * this.attributes.scrollSpeed * -1; - } else { - const t3 = i4(0, 1, -1, 1, this.progress); - this.translateValue = t3 * e4 * this.attributes.scrollSpeed * -1; - } - this.$el.style.transform = "vertical" === this.scrollOrientation ? `translate3d(0, ${this.translateValue}px, 0)` : `translate3d(${this.translateValue}px, 0, 0)`; - } else - this.translateValue && (this.$el.style.transform = "translate3d(0, 0, 0)"), this.translateValue = 0; - } - setInview() { - if (this.isInview) - return; - this.isInview = true, this.$el.classList.add(this.attributes.scrollClass); - const t2 = this._getScrollCallFrom(); - this.attributes.scrollCall && this._dispatchCall("enter", t2); - } - setOutOfView() { - if (!this.isInview || !this.attributes.scrollRepeat) - return; - this.isInview = false, this.$el.classList.remove(this.attributes.scrollClass); - const t2 = this._getScrollCallFrom(); - this.attributes.scrollCall && this._dispatchCall("leave", t2); - } - setInteractivityOn() { - this.isInteractive || (this.isInteractive = true, this.subscribeElementUpdateFn(this)); - } - setInteractivityOff() { - this.isInteractive && (this.isInteractive = false, this.unsubscribeElementUpdateFn(this), null != this.lastProgress && this._computeProgress(r4([0, 1], this.lastProgress))); - } - _resize() { - this.metrics.bcr = this.$el.getBoundingClientRect(), this._computeMetrics(), this._computeIntersection(), this.isFirstResize && (this.isFirstResize = false, this.isInFold && this.setInview()); - } - _computeMetrics() { - const { top: t2, left: s5, height: e4, width: i5 } = this.metrics.bcr, r5 = "vertical" === this.scrollOrientation ? window.innerHeight : window.innerWidth, l4 = "vertical" === this.scrollOrientation ? e4 : i5; - this.metrics.offsetStart = this.currentScroll + ("vertical" === this.scrollOrientation ? t2 : s5) - this.translateValue, this.metrics.offsetEnd = this.metrics.offsetStart + l4, this.isInFold = this.metrics.offsetStart < r5 && !this.attributes.scrollIgnoreFold; - } - _computeIntersection() { - const t2 = "vertical" === this.scrollOrientation ? window.innerHeight : window.innerWidth, s5 = "vertical" === this.scrollOrientation ? this.metrics.bcr.height : this.metrics.bcr.width, e4 = this.attributes.scrollOffset.split(","), i5 = null != e4[0] ? e4[0].trim() : "0", r5 = null != e4[1] ? e4[1].trim() : "0", l4 = this.attributes.scrollPosition.split(","); - let n5 = null != l4[0] ? l4[0].trim() : "start"; - const o5 = null != l4[1] ? l4[1].trim() : "end", a4 = i5.includes("%") ? t2 * parseInt(i5.replace("%", "").trim()) * 0.01 : parseInt(i5), c4 = r5.includes("%") ? t2 * parseInt(r5.replace("%", "").trim()) * 0.01 : parseInt(r5); - switch (this.isInFold && (n5 = "fold"), n5) { - case "start": - default: - this.intersection.start = this.metrics.offsetStart - t2 + a4; - break; - case "middle": - this.intersection.start = this.metrics.offsetStart - t2 + a4 + 0.5 * s5; - break; - case "end": - this.intersection.start = this.metrics.offsetStart - t2 + a4 + s5; - break; - case "fold": - this.intersection.start = 0; - } - switch (o5) { - case "start": - this.intersection.end = this.metrics.offsetStart - c4; - break; - case "middle": - this.intersection.end = this.metrics.offsetStart - c4 + 0.5 * s5; - break; - default: - this.intersection.end = this.metrics.offsetStart - c4 + s5; - } - if (this.intersection.end <= this.intersection.start) - switch (o5) { - case "start": - default: - this.intersection.end = this.intersection.start + 1; - break; - case "middle": - this.intersection.end = this.intersection.start + 0.5 * s5; - break; - case "end": - this.intersection.end = this.intersection.start + s5; - } - } - _computeProgress(t2) { - const s5 = null != t2 ? t2 : (e4 = i4(this.intersection.start, this.intersection.end, 0, 1, this.currentScroll)) < 0 ? 0 : e4 > 1 ? 1 : e4; - var e4; - if (this.progress = s5, s5 != this.lastProgress) { - if (this.lastProgress = s5, this.attributes.scrollCssProgress && this._setCssProgress(s5), this.attributes.scrollEventProgress && this._setCustomEventProgress(s5), this.attributes.scrollModuleProgress) - for (const t3 of this.progressModularModules) - this.modularInstance && this.modularInstance.call("onScrollProgress", s5, t3.moduleName, t3.moduleId); - s5 > 0 && s5 < 1 && this.setInview(), 0 === s5 && this.setOutOfView(), 1 === s5 && this.setOutOfView(); - } - } - _setCssProgress(t2 = 0) { - this.$el.style.setProperty("--progress", t2.toString()); - } - _setCustomEventProgress(t2 = 0) { - const s5 = this.attributes.scrollEventProgress; - if (!s5) - return; - const e4 = new CustomEvent(s5, { detail: { target: this.$el, progress: t2 } }); - window.dispatchEvent(e4); - } - _getProgressModularModules() { - if (!this.modularInstance) - return; - const t2 = Object.keys(this.$el.dataset).filter((t3) => t3.includes("module")), s5 = Object.entries(this.modularInstance.modules); - if (t2.length) - for (const e4 of t2) { - const t3 = this.$el.dataset[e4]; - if (!t3) - return; - for (const e5 of s5) { - const [s6, i5] = e5; - t3 in i5 && this.progressModularModules.push({ moduleName: s6, moduleId: t3 }); - } - } - } - _getScrollCallFrom() { - const t2 = r4([this.intersection.start, this.intersection.end], this.currentScroll); - return this.intersection.start === t2 ? "start" : "end"; - } - _dispatchCall(t2, s5) { - var e4, i5; - const r5 = null == (e4 = this.attributes.scrollCall) ? void 0 : e4.split(","), l4 = null == (i5 = this.attributes) ? void 0 : i5.scrollCallSelf; - if (r5 && r5.length > 1) { - var n5; - const [e5, i6, o5] = r5; - let a4; - a4 = l4 ? this.$el.dataset[`module${i6.trim()}`] : o5, this.modularInstance && this.modularInstance.call(e5.trim(), { target: this.$el, way: t2, from: s5 }, i6.trim(), null == (n5 = a4) ? void 0 : n5.trim()); - } else if (r5) { - const [e5] = r5, i6 = new CustomEvent(e5, { detail: { target: this.$el, way: t2, from: s5 } }); - window.dispatchEvent(i6); - } - } - }; - var n4 = ["scrollOffset", "scrollPosition", "scrollModuleProgress", "scrollCssProgress", "scrollEventProgress", "scrollSpeed"]; - var o4 = class { - constructor({ $el: t2, modularInstance: s5, triggerRootMargin: e4, rafRootMargin: i5, scrollOrientation: r5 }) { - this.$scrollContainer = void 0, this.modularInstance = void 0, this.triggerRootMargin = void 0, this.rafRootMargin = void 0, this.scrollElements = void 0, this.triggeredScrollElements = void 0, this.RAFScrollElements = void 0, this.scrollElementsToUpdate = void 0, this.IOTriggerInstance = void 0, this.IORafInstance = void 0, this.scrollOrientation = void 0, t2 ? (this.$scrollContainer = t2, this.modularInstance = s5, this.scrollOrientation = r5, this.triggerRootMargin = null != e4 ? e4 : "-1px -1px -1px -1px", this.rafRootMargin = null != i5 ? i5 : "100% 100% 100% 100%", this.scrollElements = [], this.triggeredScrollElements = [], this.RAFScrollElements = [], this.scrollElementsToUpdate = [], this._init()) : console.error("Please provide a DOM Element as scrollContainer"); - } - _init() { - const t2 = this.$scrollContainer.querySelectorAll("[data-scroll]"), s5 = Array.from(t2); - this._subscribeScrollElements(s5), this.IOTriggerInstance = new e3({ scrollElements: [...this.triggeredScrollElements], rootMargin: this.triggerRootMargin, IORaf: false }), this.IORafInstance = new e3({ scrollElements: [...this.RAFScrollElements], rootMargin: this.rafRootMargin, IORaf: true }); - } - destroy() { - this.IOTriggerInstance.destroy(), this.IORafInstance.destroy(), this._unsubscribeAllScrollElements(); - } - onResize({ currentScroll: t2 }) { - for (const s5 of this.RAFScrollElements) - s5.onResize({ currentScroll: t2 }); - } - onRender({ currentScroll: t2, smooth: s5 }) { - for (const e4 of this.scrollElementsToUpdate) - e4.onRender({ currentScroll: t2, smooth: s5 }); - } - removeScrollElements(t2) { - const s5 = t2.querySelectorAll("[data-scroll]"); - if (s5.length) { - for (let t3 = 0; t3 < this.triggeredScrollElements.length; t3++) { - const e4 = this.triggeredScrollElements[t3]; - Array.from(s5).indexOf(e4.$el) > -1 && (this.IOTriggerInstance.unobserve(e4.$el), this.triggeredScrollElements.splice(t3, 1)); - } - for (let t3 = 0; t3 < this.RAFScrollElements.length; t3++) { - const e4 = this.RAFScrollElements[t3]; - Array.from(s5).indexOf(e4.$el) > -1 && (this.IORafInstance.unobserve(e4.$el), this.RAFScrollElements.splice(t3, 1)); - } - s5.forEach((t3) => { - const s6 = this.scrollElementsToUpdate.find((s7) => s7.$el === t3), e4 = this.scrollElements.find((s7) => s7.$el === t3); - s6 && this._unsubscribeElementUpdate(s6), e4 && (this.scrollElements = this.scrollElements.filter((t4) => t4.id != e4.id)); - }); - } - } - addScrollElements(t2) { - const s5 = t2.querySelectorAll("[data-scroll]"), e4 = []; - this.scrollElements.forEach((t3) => { - e4.push(t3.id); - }); - const i5 = Math.max(...e4) + 1, r5 = Array.from(s5); - this._subscribeScrollElements(r5, i5, true); - } - _subscribeScrollElements(t2, s5 = 0, e4 = false) { - for (let i5 = 0; i5 < t2.length; i5++) { - const r5 = t2[i5], n5 = this._checkRafNeeded(r5), o5 = new l3({ $el: r5, id: s5 + i5, scrollOrientation: this.scrollOrientation, modularInstance: this.modularInstance, subscribeElementUpdateFn: this._subscribeElementUpdate.bind(this), unsubscribeElementUpdateFn: this._unsubscribeElementUpdate.bind(this), needRaf: n5 }); - this.scrollElements.push(o5), n5 ? (this.RAFScrollElements.push(o5), e4 && (this.IORafInstance.scrollElements.push(o5), this.IORafInstance.observe(o5.$el))) : (this.triggeredScrollElements.push(o5), e4 && (this.IOTriggerInstance.scrollElements.push(o5), this.IOTriggerInstance.observe(o5.$el))); - } - } - _unsubscribeAllScrollElements() { - this.scrollElements = [], this.RAFScrollElements = [], this.triggeredScrollElements = [], this.scrollElementsToUpdate = []; - } - _subscribeElementUpdate(t2) { - this.scrollElementsToUpdate.push(t2); - } - _unsubscribeElementUpdate(t2) { - this.scrollElementsToUpdate = this.scrollElementsToUpdate.filter((s5) => s5.id != t2.id); - } - _checkRafNeeded(t2) { - let s5 = [...n4]; - const e4 = (t3) => { - s5 = s5.filter((s6) => s6 != t3); - }; - if (t2.dataset.scrollOffset) { - if ("0,0" != t2.dataset.scrollOffset.split(",").map((t3) => t3.replace("%", "").trim()).join(",")) - return true; - e4("scrollOffset"); - } else - e4("scrollOffset"); - if (t2.dataset.scrollPosition) { - if ("top,bottom" != t2.dataset.scrollPosition.trim()) - return true; - e4("scrollPosition"); - } else - e4("scrollPosition"); - if (t2.dataset.scrollSpeed && !isNaN(parseFloat(t2.dataset.scrollSpeed))) - return true; - e4("scrollSpeed"); - for (const e5 of s5) - if (e5 in t2.dataset) - return true; - return false; - } - }; - var a3 = class { - constructor({ resizeElements: t2, resizeCallback: s5 = () => { - } }) { - this.$resizeElements = void 0, this.isFirstObserve = void 0, this.observer = void 0, this.resizeCallback = void 0, this.$resizeElements = t2, this.resizeCallback = s5, this.isFirstObserve = true, this._init(); - } - _init() { - this.observer = new ResizeObserver((t2) => { - var s5; - !this.isFirstObserve && (null == (s5 = this.resizeCallback) || s5.call(this)), this.isFirstObserve = false; - }); - for (const t2 of this.$resizeElements) - this.observer.observe(t2); - } - destroy() { - this.observer.disconnect(); - } - }; - var c3 = { wrapper: window, content: document.documentElement, eventsTarget: window, lerp: 0.1, duration: 0.75, orientation: "vertical", gestureOrientation: "vertical", smoothWheel: true, smoothTouch: false, syncTouch: false, syncTouchLerp: 0.1, touchInertiaMultiplier: 35, wheelMultiplier: 1, touchMultiplier: 2, normalizeWheel: false, autoResize: true, easing: (t2) => Math.min(1, 1.001 - Math.pow(2, -10 * t2)) }; - var h3 = class { - constructor({ lenisOptions: t2 = {}, modularInstance: e4, triggerRootMargin: i5, rafRootMargin: r5, autoResize: l4 = true, autoStart: n5 = true, scrollCallback: o5 = () => { - }, initCustomTicker: a4, destroyCustomTicker: h4 } = {}) { - this.rafPlaying = void 0, this.lenisInstance = void 0, this.coreInstance = void 0, this.lenisOptions = void 0, this.modularInstance = void 0, this.triggerRootMargin = void 0, this.rafRootMargin = void 0, this.rafInstance = void 0, this.autoResize = void 0, this.autoStart = void 0, this.ROInstance = void 0, this.initCustomTicker = void 0, this.destroyCustomTicker = void 0, this._onRenderBind = void 0, this._onResizeBind = void 0, this._onScrollToBind = void 0, this.lenisOptions = s4({}, c3, t2), Object.assign(this, { lenisOptions: t2, modularInstance: e4, triggerRootMargin: i5, rafRootMargin: r5, autoResize: l4, autoStart: n5, scrollCallback: o5, initCustomTicker: a4, destroyCustomTicker: h4 }), this._onRenderBind = this._onRender.bind(this), this._onScrollToBind = this._onScrollTo.bind(this), this._onResizeBind = this._onResize.bind(this), this.rafPlaying = false, this._init(); - } - _init() { - var s5; - this.lenisInstance = new r3({ wrapper: this.lenisOptions.wrapper, content: this.lenisOptions.content, eventsTarget: this.lenisOptions.eventsTarget, lerp: this.lenisOptions.lerp, duration: this.lenisOptions.duration, orientation: this.lenisOptions.orientation, gestureOrientation: this.lenisOptions.gestureOrientation, smoothWheel: this.lenisOptions.smoothWheel, smoothTouch: this.lenisOptions.smoothTouch, syncTouch: this.lenisOptions.syncTouch, syncTouchLerp: this.lenisOptions.syncTouchLerp, touchInertiaMultiplier: this.lenisOptions.touchInertiaMultiplier, wheelMultiplier: this.lenisOptions.wheelMultiplier, touchMultiplier: this.lenisOptions.touchMultiplier, normalizeWheel: this.lenisOptions.normalizeWheel, easing: this.lenisOptions.easing }), null == (s5 = this.lenisInstance) || s5.on("scroll", this.scrollCallback), document.documentElement.setAttribute("data-scroll-orientation", this.lenisInstance.options.orientation), requestAnimationFrame(() => { - this.coreInstance = new o4({ $el: this.lenisInstance.rootElement, modularInstance: this.modularInstance, triggerRootMargin: this.triggerRootMargin, rafRootMargin: this.rafRootMargin, scrollOrientation: this.lenisInstance.options.orientation }), this._bindEvents(), this.initCustomTicker && !this.destroyCustomTicker ? console.warn("initCustomTicker callback is declared, but destroyCustomTicker is not. Please pay attention. It could cause trouble.") : !this.initCustomTicker && this.destroyCustomTicker && console.warn("destroyCustomTicker callback is declared, but initCustomTicker is not. Please pay attention. It could cause trouble."), this.autoStart && this.start(); - }); - } - destroy() { - this.stop(), this._unbindEvents(), this.lenisInstance.destroy(), this.coreInstance.destroy(); - } - _bindEvents() { - this._bindScrollToEvents(), this.autoResize && ("ResizeObserver" in window ? this.ROInstance = new a3({ resizeElements: [document.body], resizeCallback: this._onResizeBind }) : window.addEventListener("resize", this._onResizeBind)); - } - _unbindEvents() { - this._unbindScrollToEvents(), this.autoResize && ("ResizeObserver" in window ? this.ROInstance && this.ROInstance.destroy() : window.removeEventListener("resize", this._onResizeBind)); - } - _bindScrollToEvents(t2) { - const s5 = t2 || this.lenisInstance.rootElement, e4 = null == s5 ? void 0 : s5.querySelectorAll("[data-scroll-to]"); - (null == e4 ? void 0 : e4.length) && e4.forEach((t3) => { - t3.addEventListener("click", this._onScrollToBind, false); - }); - } - _unbindScrollToEvents(t2) { - const s5 = t2 || this.lenisInstance.rootElement, e4 = null == s5 ? void 0 : s5.querySelectorAll("[data-scroll-to]"); - (null == e4 ? void 0 : e4.length) && e4.forEach((t3) => { - t3.removeEventListener("click", this._onScrollToBind, false); - }); - } - _onResize() { - requestAnimationFrame(() => { - var t2; - null == (t2 = this.coreInstance) || t2.onResize({ currentScroll: this.lenisInstance.scroll }); - }); - } - _onRender() { - var t2, s5; - null == (t2 = this.lenisInstance) || t2.raf(Date.now()), null == (s5 = this.coreInstance) || s5.onRender({ currentScroll: this.lenisInstance.scroll, smooth: this.lenisInstance.isSmooth }); - } - _onScrollTo(t2) { - var s5; - t2.preventDefault(); - const e4 = null != (s5 = t2.currentTarget) ? s5 : null; - if (!e4) - return; - const i5 = e4.getAttribute("data-scroll-to-href") || e4.getAttribute("href"), r5 = e4.getAttribute("data-scroll-to-offset") || 0, l4 = e4.getAttribute("data-scroll-to-duration") || this.lenisOptions.duration || c3.duration; - i5 && this.scrollTo(i5, { offset: "string" == typeof r5 ? parseInt(r5) : r5, duration: "string" == typeof l4 ? parseInt(l4) : l4 }); - } - start() { - var t2; - this.rafPlaying || (null == (t2 = this.lenisInstance) || t2.start(), this.rafPlaying = true, this.initCustomTicker ? this.initCustomTicker(this._onRenderBind) : this._raf()); - } - stop() { - var t2; - this.rafPlaying && (null == (t2 = this.lenisInstance) || t2.stop(), this.rafPlaying = false, this.destroyCustomTicker ? this.destroyCustomTicker(this._onRenderBind) : this.rafInstance && cancelAnimationFrame(this.rafInstance)); - } - removeScrollElements(t2) { - var s5; - t2 ? (this._unbindScrollToEvents(t2), null == (s5 = this.coreInstance) || s5.removeScrollElements(t2)) : console.error("Please provide a DOM Element as $oldContainer"); - } - addScrollElements(t2) { - var s5; - t2 ? (null == (s5 = this.coreInstance) || s5.addScrollElements(t2), requestAnimationFrame(() => { - this._bindScrollToEvents(t2); - })) : console.error("Please provide a DOM Element as $newContainer"); - } - resize() { - this._onResizeBind(); - } - scrollTo(t2, s5) { - var e4; - null == (e4 = this.lenisInstance) || e4.scrollTo(t2, { offset: null == s5 ? void 0 : s5.offset, lerp: null == s5 ? void 0 : s5.lerp, duration: null == s5 ? void 0 : s5.duration, immediate: null == s5 ? void 0 : s5.immediate, lock: null == s5 ? void 0 : s5.lock, force: null == s5 ? void 0 : s5.force, easing: null == s5 ? void 0 : s5.easing, onComplete: null == s5 ? void 0 : s5.onComplete }); - } - _raf() { - this._onRenderBind(), this.rafInstance = requestAnimationFrame(() => this._raf()); - } - }; - - // assets/scripts/modules/Scroll.js - var Scroll_default = class extends _default { - constructor(m3) { - super(m3); - } - init() { - this.scroll = new h3({ - modularInstance: this - }); - } - /** - * Lazy load the related image. - * - * @see ../utils/image.js - * - * It is recommended to wrap your `` into an element with the - * CSS class name `.c-lazy`. The CSS class name modifier `.-lazy-loaded` - * will be applied on both the image and the parent wrapper. - * - * ```html - *
- * - *
- * ``` - * - * @param {LocomotiveScroll} args - The Locomotive Scroll instance. - */ - lazyLoad(args) { - lazyLoadImage(args.target, null, () => { - }); - } - scrollTo(params) { - var _b; - let _a = params, { target } = _a, options = __objRest(_a, ["target"]); - options = Object.assign({ - // Defaults - duration: 1 - }, options); - (_b = this.scroll) == null ? void 0 : _b.scrollTo(target, options); - } - destroy() { - this.scroll.destroy(); - } - }; - - // assets/scripts/globals.js - var import_svg4everybody = __toESM(require_svg4everybody(), 1); - var gridHelper2; - (() => __async(void 0, null, function* () { - if (ENV.IS_DEV) { - const gridHelperModule = yield Promise.resolve().then(() => (init_grid_helper(), grid_helper_exports)); - gridHelper2 = gridHelperModule == null ? void 0 : gridHelperModule.gridHelper; - } - }))(); - function globals_default() { - (0, import_svg4everybody.default)(); - gridHelper2 == null ? void 0 : gridHelper2(); - } - - // assets/scripts/utils/tickers.js - var debounce = (callback, delay, immediate = false) => { - let timeout = null; - return (...args) => { - clearTimeout(timeout); - const later = () => { - timeout = null; - if (!immediate) { - callback(...args); - } - }; - if (immediate && !timeout) { - callback(...args); - } - timeout = setTimeout(later, delay); - }; - }; - - // assets/scripts/utils/dom.js - var $html = document.documentElement; - var $body = document.body; - - // assets/scripts/utils/fonts.js - var isFontLoadingAPIAvailable = "fonts" in document; - function conformsToReference(font, criterion2) { - for (const [key, value] of Object.entries(criterion2)) { - switch (key) { - case "family": { - if (trim(font[key]) !== value) { - return false; - } - break; - } - case "weight": { - if (font[key] != value) { - return false; - } - break; - } - default: { - if (font[key] !== value) { - return false; - } - break; - } - } - } - return true; - } - function conformsToShorthand(font, criterion2) { - const family = trim(font.family); - if (trim(family) === criterion2) { - return true; - } - if (criterion2.endsWith(trim(family)) && (criterion2.match(font.weight) || criterion2.match(font.style))) { - return true; - } - return true; - } - function findManyByReference(search) { - const found = []; - for (const font of document.fonts) { - if (conformsToReference(font, search)) { - found.push(font); - } - } - return found; - } - function findManyByShorthand(search) { - const found = []; - for (const font of document.fonts) { - if (conformsToShorthand(font, search)) { - found.push(font); - } - } - return found; - } - function getMany(queries) { - if (!Array.isArray(queries)) { - queries = [queries]; - } - const found = /* @__PURE__ */ new Set(); - queries.forEach((search) => { - if (search) { - switch (typeof search) { - case "string": - found.add(...findManyByShorthand(search)); - return; - case "object": - found.add(...findManyByReference(search)); - return; - } - } - throw new TypeError( - "Expected font query to be font shorthand or font reference" - ); - }); - return [...found]; - } - function loadFonts(fontsToLoad, debug = false) { - return __async(this, null, function* () { - var _a; - if (((_a = fontsToLoad.size) != null ? _a : fontsToLoad.length) === 0) { - throw new TypeError( - "Expected at least one font" - ); - } - return yield loadFontsWithAPI([...fontsToLoad], debug); - }); - } - function loadFontFaceWithAPI(font) { - return __async(this, null, function* () { - return yield (font.status === "unloaded" ? font.load() : font.loaded).then((font2) => font2, (err) => font); - }); - } - function loadFontsWithAPI(fontsToLoad, debug = false) { - return __async(this, null, function* () { - debug && console.group("[loadFonts:API]", fontsToLoad.length, "/", document.fonts.size); - const fontsToBeLoaded = []; - for (const fontToLoad of fontsToLoad) { - if (fontToLoad instanceof FontFace) { - if (!document.fonts.has(fontToLoad)) { - document.fonts.add(fontToLoad); - } - fontsToBeLoaded.push( - loadFontFaceWithAPI(fontToLoad) - ); - } else { - fontsToBeLoaded.push( - ...getMany(fontToLoad).map((font) => loadFontFaceWithAPI(font)) - ); - } - } - debug && console.groupEnd(); - return yield Promise.all(fontsToBeLoaded); - }); - } - function trim(value) { - return value.replace(/['"]+/g, ""); - } - - // assets/scripts/app.js - var app = new main_esm_default({ - modules: modules_exports - }); - window.addEventListener("load", (event) => { - const $style = document.getElementById("main-css"); - if ($style) { - if ($style.isLoaded) { - init(); - } else { - $style.addEventListener("load", (event2) => { - init(); - }); - } - } else { - console.warn('The "main-css" stylesheet not found'); - } - }); - function init() { - globals_default(); - app.init(app); - $html.classList.add(CSS_CLASS.LOADED); - $html.classList.add(CSS_CLASS.READY); - $html.classList.remove(CSS_CLASS.LOADING); - const resizeEndEvent = new CustomEvent(CUSTOM_EVENT.RESIZE_END); - window.addEventListener("resize", () => { - $html.style.setProperty("--vw", `${document.documentElement.clientWidth * 0.01}px`); - debounce(() => { - window.dispatchEvent(resizeEndEvent); - }, 200, false); - }); - if (isFontLoadingAPIAvailable) { - loadFonts(FONT.EAGER, ENV.IS_DEV).then((eagerFonts) => { - $html.classList.add(CSS_CLASS.FONTS_LOADED); - if (ENV.IS_DEV) { - console.group("Eager fonts loaded!", eagerFonts.length, "/", document.fonts.size); - console.group("State of eager fonts:"); - eagerFonts.forEach((font) => console.log( - font.family, - font.style, - font.weight, - font.status - /*, font*/ - )); - console.groupEnd(); - console.group("State of all fonts:"); - document.fonts.forEach((font) => console.log( - font.family, - font.style, - font.weight, - font.status - /*, font*/ - )); - console.groupEnd(); - } - }); - } - } -})(); +(()=>{var De=Object.create;var B=Object.defineProperty;var Ve=Object.getOwnPropertyDescriptor;var Ne=Object.getOwnPropertyNames,q=Object.getOwnPropertySymbols,je=Object.getPrototypeOf,gt=Object.prototype.hasOwnProperty,Wt=Object.prototype.propertyIsEnumerable;var Ht=(s,t,e)=>t in s?B(s,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):s[t]=e,qt=(s,t)=>{for(var e in t||(t={}))gt.call(t,e)&&Ht(s,e,t[e]);if(q)for(var e of q(t))Wt.call(t,e)&&Ht(s,e,t[e]);return s};var G=(s,t)=>{var e={};for(var i in s)gt.call(s,i)&&t.indexOf(i)<0&&(e[i]=s[i]);if(s!=null&&q)for(var i of q(s))t.indexOf(i)<0&&Wt.call(s,i)&&(e[i]=s[i]);return e};var He=(s,t)=>()=>(s&&(t=s(s=0)),t);var We=(s,t)=>()=>(t||s((t={exports:{}}).exports,t),t.exports),Bt=(s,t)=>{for(var e in t)B(s,e,{get:t[e],enumerable:!0})},qe=(s,t,e,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Ne(t))!gt.call(s,n)&&n!==e&&B(s,n,{get:()=>t[n],enumerable:!(i=Ve(t,n))||i.enumerable});return s};var Be=(s,t,e)=>(e=s!=null?De(je(s)):{},qe(t||!s||!s.__esModule?B(e,"default",{value:s,enumerable:!0}):e,s));var y=(s,t,e)=>new Promise((i,n)=>{var r=l=>{try{a(e.next(l))}catch(c){n(c)}},o=l=>{try{a(e.throw(l))}catch(c){n(c)}},a=l=>l.done?i(l.value):Promise.resolve(l.value).then(r,o);a((e=e.apply(s,t)).next())});var Re=We((_e,ft)=>{(function(s,t){typeof define=="function"&&define.amd?define([],function(){return s.svg4everybody=t()}):typeof ft=="object"&&ft.exports?ft.exports=t():s.svg4everybody=t()})(_e,function(){function s(n,r,o){if(o){var a=document.createDocumentFragment(),l=!r.hasAttribute("viewBox")&&o.getAttribute("viewBox");l&&r.setAttribute("viewBox",l);for(var c=o.cloneNode(!0);c.childNodes.length;)a.appendChild(c.firstChild);n.appendChild(a)}}function t(n){n.onreadystatechange=function(){if(n.readyState===4){var r=n._cachedDocument;r||(r=n._cachedDocument=document.implementation.createHTMLDocument(""),r.body.innerHTML=n.responseText,n._cachedTarget={}),n._embeds.splice(0).map(function(o){var a=n._cachedTarget[o.id];a||(a=n._cachedTarget[o.id]=r.getElementById(o.id)),s(o.parent,o.svg,a)})}},n.onreadystatechange()}function e(n){function r(){for(var m=0;m0)&&p(r,67)}var o,a=Object(n),l=/\bTrident\/[567]\b|\bMSIE (?:9|10)\.0\b/,c=/\bAppleWebKit\/(\d+)\b/,h=/\bEdge\/12\.(\d+)\b/,u=/\bEdge\/.(\d+)\b/,d=window.top!==window.self;o="polyfill"in a?a.polyfill:l.test(navigator.userAgent)||(navigator.userAgent.match(h)||[])[1]<10547||(navigator.userAgent.match(c)||[])[1]<537||u.test(navigator.userAgent)&&d;var f={},p=window.requestAnimationFrame||setTimeout,w=document.getElementsByTagName("use"),g=0;o&&r()}function i(n){for(var r=n;r.nodeName.toLowerCase()!=="svg"&&(r=r.parentNode););return r}return e})});var Te={};Bt(Te,{gridHelper:()=>Hs});function Hs({gutterCssVar:s=Vs,marginCssVar:t=Ns,rgbaColor:e=js}={}){let i=document.createElement("div");document.body.append(i),Ae(i,e),Ws(i,s,t),qs(i,e)}function Ws(s,t,e){let i=s.style;i.zIndex="10000",i.position="fixed",i.top="0",i.left="0",i.display="flex",i.width="100%",i.height="100%",i.columnGap=`var(${t}, 0)`,i.paddingLeft=`var(${e}, 0)`,i.paddingRight=`var(${e}, 0)`,i.pointerEvents="none",i.visibility="hidden"}function Ae(s,t){s.innerHTML="";let e=Number(window.getComputedStyle(s).getPropertyValue("--grid-columns")),i;for(var n=0;n{n.key=="Control"?e=!0:e&&n.key=="g"&&(i?s.style.visibility="hidden":s.style.visibility="visible",i=!i)}),document.addEventListener("keyup",n=>{n.key=="Control"&&(e=!1)})}var Vs,Ns,js,Ce=He(()=>{Vs="--grid-gutter",Ns="--grid-margin",js="rgba(255, 0, 0, .1)"});function K(s){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?K=function(t){return typeof t}:K=function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},K(s)}function Kt(s,t){if(!(s instanceof t))throw new TypeError("Cannot call a class as a function")}function Gt(s,t){for(var e=0;es.length)&&(t=s.length);for(var e=0,i=new Array(t);eX,Load:()=>ot,Scroll:()=>dt});var X=class extends U{constructor(s){super(s),this.$closeBtn=this.$("close")[0]}init(){this.onKeyDown=this.onKeyDown.bind(this)}onKeyDown(s){s.key==="Escape"&&(console.log("ESCAPE"),s.preventDefault(),this.$closeBtn.click())}populate(s){this.el.appendChild(s)}show(){this.el.showModal(),window.addEventListener("keydown",this.onKeyDown)}close(){window.removeEventListener("keydown",this.onKeyDown),this.el.close()}};var wt=new WeakMap;function yt(s,t,e,i){var a,l;if(!s&&!wt.has(t))return!1;let n=(a=wt.get(t))!=null?a:new WeakMap;wt.set(t,n);let r=(l=n.get(e))!=null?l:new Set;n.set(e,r);let o=r.has(i);return s?r.add(i):r.delete(i),o&&s}function es(s,t){let e=s.target;if(e instanceof Text&&(e=e.parentElement),e instanceof Element&&s.currentTarget instanceof Element){let i=e.closest(t);if(i&&s.currentTarget.contains(i))return i}}function ss(s,t,e,i={}){let{signal:n,base:r=document}=i;if(n!=null&&n.aborted)return;let f=i,{once:o}=f,a=G(f,["once"]),l=r instanceof Document?r.documentElement:r,c=Boolean(typeof i=="object"?i.capture:i),h=p=>{let w=es(p,s);if(w){let g=Object.assign(p,{delegateTarget:w});e.call(l,g),o&&(l.removeEventListener(t,h,a),yt(!1,l,e,u))}},u=JSON.stringify({selector:s,type:t,capture:c});yt(!0,l,e,u)||l.addEventListener(t,h,a),n==null||n.addEventListener("abort",()=>{yt(!1,l,e,u)})}var Z=ss;function is(s){for(var t=[],e=0;e=48&&o<=57||o>=65&&o<=90||o>=97&&o<=122||o===95){n+=s[r++];continue}break}if(!n)throw new TypeError("Missing parameter name at ".concat(e));t.push({type:"NAME",index:e,value:n}),e=r;continue}if(i==="("){var a=1,l="",r=e+1;if(s[r]==="?")throw new TypeError('Pattern cannot start with "?" at '.concat(r));for(;r)?(?!\?)/g,i=0,n=e.exec(s.source);n;)t.push({name:n[1]||i++,prefix:"",suffix:"",modifier:"",pattern:""}),n=e.exec(s.source);return s}function as(s,t,e){var i=s.map(function(n){return ee(n,t,e).source});return new RegExp("(?:".concat(i.join("|"),")"),te(e))}function ls(s,t,e){return cs(ns(s,e),t,e)}function cs(s,t,e){e===void 0&&(e={});for(var i=e.strict,n=i===void 0?!1:i,r=e.start,o=r===void 0?!0:r,a=e.end,l=a===void 0?!0:a,c=e.encode,h=c===void 0?function(x){return x}:c,u=e.delimiter,d=u===void 0?"/#?":u,f=e.endsWith,p=f===void 0?"":f,w="[".concat(F(p),"]|$"),g="[".concat(F(d),"]"),m=o?"^":"",I=0,O=s;I-1:C===void 0;n||(m+="(?:".concat(g,"(?=").concat(w,"))?")),M||(m+="(?=".concat(g,"|").concat(w,")"))}return new RegExp(m,te(e))}function ee(s,t,e){return s instanceof RegExp?os(s,t):Array.isArray(s)?as(s,t,e):ls(s,t,e)}function R(){return R=Object.assign?Object.assign.bind():function(s){for(var t=1;tString(s).toLowerCase().replace(/[\s/_.]+/g,"-").replace(/[^\w-]+/g,"").replace(/--+/g,"-").replace(/^-+|-+$/g,"")||t||"",P=({hash:s}={})=>window.location.pathname+window.location.search+(s?window.location.hash:""),hs=(s,t={})=>{let e=R({url:s=s||P({hash:!0}),random:Math.random(),source:"swup"},t);window.history.pushState(e,"",s)},j=(s=null,t={})=>{s=s||P({hash:!0});let e=R({},window.history.state||{},{url:s,random:Math.random(),source:"swup"},t);window.history.replaceState(e,"",s)},us=(s,t,e,i)=>{let n=new AbortController;return i=R({},i,{signal:n.signal}),Z(s,t,e,i),{destroy:()=>n.abort()}},A=class extends URL{constructor(t,e=document.baseURI){super(t.toString(),e),Object.setPrototypeOf(this,A.prototype)}get url(){return this.pathname+this.search}static fromElement(t){let e=t.getAttribute("href")||t.getAttribute("xlink:href")||"";return new A(e)}static fromUrl(t){return new A(t)}},Ot=(s,t)=>{try{return Qt(s,t)}catch(e){throw new Error(`[swup] Error parsing path "${String(s)}": +${String(e)}`)}},z=class extends Error{constructor(t,e){super(t),this.url=void 0,this.status=void 0,this.aborted=void 0,this.timedOut=void 0,this.name="FetchError",this.url=e.url,this.status=e.status,this.aborted=e.aborted||!1,this.timedOut=e.timedOut||!1}};function ds(e){return y(this,arguments,function*(s,t={}){var i;s=A.fromUrl(s).url;let{visit:n=this.visit}=t,r=R({},this.options.requestHeaders,t.headers),o=(i=t.timeout)!=null?i:this.options.timeout,a=new AbortController,{signal:l}=a;t=R({},t,{headers:r,signal:l});let c,h=!1,u=null;o&&o>0&&(u=setTimeout(()=>{h=!0,a.abort("timeout")},o));try{c=yield this.hooks.call("fetch:request",n,{url:s,options:t},(m,{url:I,options:O})=>fetch(I,O)),u&&clearTimeout(u)}catch(m){throw h?(this.hooks.call("fetch:timeout",n,{url:s}),new z(`Request timed out: ${s}`,{url:s,timedOut:h})):(m==null?void 0:m.name)==="AbortError"||l.aborted?new z(`Request aborted: ${s}`,{url:s,aborted:!0}):m}let{status:d,url:f}=c,p=yield c.text();if(d===500)throw this.hooks.call("fetch:error",n,{status:d,response:c,url:f}),new z(`Server error: ${f}`,{status:d,url:f});if(!p)throw new z(`Empty response: ${f}`,{status:d,url:f});let{url:w}=A.fromUrl(f),g={url:w,html:p};return!n.cache.write||t.method&&t.method!=="GET"||s!==w||this.cache.set(g.url,g),g})}var bt=class{constructor(t){this.swup=void 0,this.pages=new Map,this.swup=t}get size(){return this.pages.size}get all(){let t=new Map;return this.pages.forEach((e,i)=>{t.set(i,R({},e))}),t}has(t){return this.pages.has(this.resolve(t))}get(t){let e=this.pages.get(this.resolve(t));return e&&R({},e)}set(t,e){e=R({},e,{url:t=this.resolve(t)}),this.pages.set(t,e),this.swup.hooks.callSync("cache:set",void 0,{page:e})}update(t,e){t=this.resolve(t);let i=R({},this.get(t),e,{url:t});this.pages.set(t,i)}delete(t){this.pages.delete(this.resolve(t))}clear(){this.pages.clear(),this.swup.hooks.callSync("cache:clear",void 0,void 0)}prune(t){this.pages.forEach((e,i)=>{t(i,e)&&this.delete(i)})}resolve(t){let{url:e}=A.fromUrl(t);return this.swup.resolveUrl(e)}},Et=(s,t=document)=>t.querySelector(s),_t=(s,t=document)=>Array.from(t.querySelectorAll(s)),re=()=>new Promise(s=>{requestAnimationFrame(()=>{requestAnimationFrame(()=>{s()})})});function oe(s){return!!s&&(typeof s=="object"||typeof s=="function")&&typeof s.then=="function"}function fs(s,t=[]){return new Promise((e,i)=>{let n=s(...t);oe(n)?n.then(e,i):e(n)})}var se=s=>window.CSS&&window.CSS.escape?CSS.escape(s):s,ie=s=>1e3*Number(s.slice(0,-1).replace(",",".")),St=class{constructor(t){this.swup=void 0,this.swupClasses=["to-","is-changing","is-rendering","is-popstate","is-animating","is-leaving"],this.swup=t}get selectors(){let{scope:t}=this.swup.visit.animation;return t==="containers"?this.swup.visit.containers:t==="html"?["html"]:Array.isArray(t)?t:[]}get selector(){return this.selectors.join(",")}get targets(){return this.selector.trim()?_t(this.selector):[]}add(...t){this.targets.forEach(e=>e.classList.add(...t))}remove(...t){this.targets.forEach(e=>e.classList.remove(...t))}clear(){this.targets.forEach(t=>{let e=t.className.split(" ").filter(i=>this.isSwupClass(i));t.classList.remove(...e)})}isSwupClass(t){return this.swupClasses.some(e=>t.startsWith(e))}},tt=class{constructor(t,e){this.id=void 0,this.state=void 0,this.from=void 0,this.to=void 0,this.containers=void 0,this.animation=void 0,this.trigger=void 0,this.cache=void 0,this.history=void 0,this.scroll=void 0;let{to:i,from:n=t.currentPageUrl,hash:r,el:o,event:a}=e;this.id=Math.random(),this.state=1,this.from={url:n},this.to={url:i,hash:r},this.containers=t.options.containers,this.animation={animate:!0,wait:!1,name:void 0,native:t.options.native,scope:t.options.animationScope,selector:t.options.animationSelector},this.trigger={el:o,event:a},this.cache={read:t.options.cache,write:t.options.cache},this.history={action:"push",popstate:!1,direction:void 0},this.scroll={reset:!0,target:void 0}}advance(t){this.state=7}};function ms(s){return new tt(this,s)}var It=class{constructor(t){this.swup=void 0,this.registry=new Map,this.hooks=["animation:out:start","animation:out:await","animation:out:end","animation:in:start","animation:in:await","animation:in:end","animation:skip","cache:clear","cache:set","content:replace","content:scroll","enable","disable","fetch:request","fetch:error","fetch:timeout","history:popstate","link:click","link:self","link:anchor","link:newtab","page:load","page:view","scroll:top","scroll:anchor","visit:start","visit:transition","visit:abort","visit:end"],this.swup=t,this.init()}init(){this.hooks.forEach(t=>this.create(t))}create(t){this.registry.has(t)||this.registry.set(t,new Map)}exists(t){return this.registry.has(t)}get(t){let e=this.registry.get(t);if(e)return e;console.error(`Unknown hook '${t}'`)}clear(){this.registry.forEach(t=>t.clear())}on(t,e,i={}){let n=this.get(t);if(!n)return console.warn(`Hook '${t}' not found.`),()=>{};let r=R({},i,{id:n.size+1,hook:t,handler:e});return n.set(e,r),()=>this.off(t,e)}before(t,e,i={}){return this.on(t,e,R({},i,{before:!0}))}replace(t,e,i={}){return this.on(t,e,R({},i,{replace:!0}))}once(t,e,i={}){return this.on(t,e,R({},i,{once:!0}))}off(t,e){let i=this.get(t);i&&e?i.delete(e)||console.warn(`Handler for hook '${t}' not found.`):i&&i.clear()}call(t,e,i,n){return y(this,null,function*(){let[r,o,a]=this.parseCallArgs(t,e,i,n),{before:l,handler:c,after:h}=this.getHandlers(t,a);yield this.run(l,r,o);let[u]=yield this.run(c,r,o,!0);return yield this.run(h,r,o),this.dispatchDomEvent(t,r,o),u})}callSync(t,e,i,n){let[r,o,a]=this.parseCallArgs(t,e,i,n),{before:l,handler:c,after:h}=this.getHandlers(t,a);this.runSync(l,r,o);let[u]=this.runSync(c,r,o,!0);return this.runSync(h,r,o),this.dispatchDomEvent(t,r,o),u}parseCallArgs(t,e,i,n){return e instanceof tt||typeof e!="object"&&typeof i!="function"?[e,i,n]:[void 0,e,i]}run(r){return y(this,arguments,function*(t,e=this.swup.visit,i,n=!1){let o=[];for(let{hook:a,handler:l,defaultHandler:c,once:h}of t)if(e==null||!e.done){h&&this.off(a,l);try{let u=yield fs(l,[e,i,c]);o.push(u)}catch(u){if(n)throw u;console.error(`Error in hook '${a}':`,u)}}return o})}runSync(t,e=this.swup.visit,i,n=!1){let r=[];for(let{hook:o,handler:a,defaultHandler:l,once:c}of t)if(e==null||!e.done){c&&this.off(o,a);try{let h=a(e,i,l);r.push(h),oe(h)&&console.warn(`Swup will not await Promises in handler for synchronous hook '${o}'.`)}catch(h){if(n)throw h;console.error(`Error in hook '${o}':`,h)}}return r}getHandlers(t,e){let i=this.get(t);if(!i)return{found:!1,before:[],handler:[],after:[],replaced:!1};let n=Array.from(i.values()),r=this.sortRegistrations,o=n.filter(({before:u,replace:d})=>u&&!d).sort(r),a=n.filter(({replace:u})=>u).filter(u=>!0).sort(r),l=n.filter(({before:u,replace:d})=>!u&&!d).sort(r),c=a.length>0,h=[];if(e&&(h=[{id:0,hook:t,handler:e}],c)){let u=a.length-1,d=f=>{let p=a[f-1];return p?(w,g)=>p.handler(w,g,d(f-1)):e};h=[{id:0,hook:t,handler:a[u].handler,defaultHandler:d(u)}]}return{found:!0,before:o,handler:h,after:l,replaced:c}}sortRegistrations(t,e){var i,n;return((i=t.priority)!=null?i:0)-((n=e.priority)!=null?n:0)||t.id-e.id||0}dispatchDomEvent(t,e,i){if(e!=null&&e.done)return;let n={hook:t,args:i,visit:e||this.swup.visit};document.dispatchEvent(new CustomEvent("swup:any",{detail:n,bubbles:!0})),document.dispatchEvent(new CustomEvent(`swup:${t}`,{detail:n,bubbles:!0}))}},ps=s=>{if(s&&s.charAt(0)==="#"&&(s=s.substring(1)),!s)return null;let t=decodeURIComponent(s),e=document.getElementById(s)||document.getElementById(t)||Et(`a[name='${se(s)}']`)||Et(`a[name='${se(t)}']`);return e||s!=="top"||(e=document.body),e},N="transition",J="animation";function gs(e){return y(this,arguments,function*({elements:s,selector:t}){if(t===!1&&!s)return;let i=[];if(s)i=Array.from(s);else if(t&&(i=_t(t,document.body),!i.length))return void console.warn(`[swup] No elements found matching animationSelector \`${t}\``);let n=i.map(r=>function(o){let{type:a,timeout:l,propCount:c}=function(h,u){let d=window.getComputedStyle(h),f=Q(d,`${N}Delay`),p=Q(d,`${N}Duration`),w=ne(f,p),g=Q(d,`${J}Delay`),m=Q(d,`${J}Duration`),I=ne(g,m),O=null,v=0,b=0;return v=Math.max(w,I),O=v>0?w>I?N:J:null,b=O?O===N?p.length:m.length:0,{type:O,timeout:v,propCount:b}}(o);return!(!a||!l)&&new Promise(h=>{let u=`${a}end`,d=performance.now(),f=0,p=()=>{o.removeEventListener(u,w),h()},w=g=>{if(g.target===o){if(!function(m){return[`${N}end`,`${J}end`].includes(m.type)}(g))throw new Error("Not a transition or animation event.");(performance.now()-d)/1e3=c&&p()}};setTimeout(()=>{f0?yield Promise.all(n):t&&console.warn(`[swup] No CSS animation duration defined on elements matching \`${t}\``)})}function Q(s,t){return(s[t]||"").split(", ")}function ne(s,t){for(;s.lengthie(e)+ie(s[i])))}function vs(s,t={},e={}){if(typeof s!="string")throw new Error("swup.navigate() requires a URL parameter");if(this.shouldIgnoreVisit(s,{el:e.el,event:e.event}))return void window.location.assign(s);let{url:i,hash:n}=A.fromUrl(s),r=this.createVisit(R({},e,{to:i,hash:n}));this.performNavigation(r,t)}function ws(e){return y(this,arguments,function*(s,t={}){if(this.navigating){if(this.visit.state>=6)return s.state=2,void(this.onVisitEnd=()=>this.performNavigation(s,t));yield this.hooks.call("visit:abort",this.visit,void 0),this.visit.state=8}this.navigating=!0,this.visit=s;let{el:i}=s.trigger;t.referrer=t.referrer||this.currentPageUrl,t.animate===!1&&(s.animation.animate=!1),s.animation.animate||this.classes.clear();let n=t.history||(i==null?void 0:i.getAttribute("data-swup-history"))||void 0;n&&["push","replace"].includes(n)&&(s.history.action=n);let r=t.animation||(i==null?void 0:i.getAttribute("data-swup-animation"))||void 0;var o,a;r&&(s.animation.name=r),typeof t.cache=="object"?(s.cache.read=(o=t.cache.read)!=null?o:s.cache.read,s.cache.write=(a=t.cache.write)!=null?a:s.cache.write):t.cache!==void 0&&(s.cache={read:!!t.cache,write:!!t.cache}),delete t.cache;try{yield this.hooks.call("visit:start",s,void 0),s.state=3;let l=this.hooks.call("page:load",s,{options:t},(c,h)=>y(this,null,function*(){let u;return c.cache.read&&(u=this.cache.get(c.to.url)),h.page=u||(yield this.fetchPage(c.to.url,h.options)),h.cache=!!u,h.page}));if(l.then(({html:c})=>{s.advance(5),s.to.html=c}),!s.history.popstate){let c=s.to.url+s.to.hash;s.history.action==="replace"||s.to.url===this.currentPageUrl?j(c):(this.currentHistoryIndex++,hs(c,{index:this.currentHistoryIndex}))}if(this.currentPageUrl=P(),s.history.popstate&&this.classes.add("is-popstate"),s.animation.name&&this.classes.add(`to-${st(s.animation.name)}`),s.animation.wait&&(yield l),s.done||(yield this.hooks.call("visit:transition",s,void 0,()=>y(this,null,function*(){if(!s.animation.animate)return yield this.hooks.call("animation:skip",void 0),void(yield this.renderPage(s,yield l));s.advance(4),yield this.animatePageOut(s),s.animation.native&&document.startViewTransition?yield document.startViewTransition(()=>y(this,null,function*(){return yield this.renderPage(s,yield l)})).finished:yield this.renderPage(s,yield l),yield this.animatePageIn(s)})),s.done))return;yield this.hooks.call("visit:end",s,void 0,()=>this.classes.clear()),s.state=7,this.navigating=!1,this.onVisitEnd&&(this.onVisitEnd(),this.onVisitEnd=void 0)}catch(l){if(!l||l!=null&&l.aborted)return void(s.state=8);s.state=9,console.error(l),this.options.skipPopStateHandling=()=>(window.location.assign(s.to.url+s.to.hash),!0),window.history.back()}})}var ys=function(s){return y(this,null,function*(){yield this.hooks.call("animation:out:start",s,void 0,()=>{this.classes.add("is-changing","is-animating","is-leaving")}),yield this.hooks.call("animation:out:await",s,{skip:!1},(t,{skip:e})=>{if(!e)return this.awaitAnimations({selector:t.animation.selector})}),yield this.hooks.call("animation:out:end",s,void 0)})},bs=function({html:s},{containers:t}=this.options){var e;let i=new DOMParser().parseFromString(s,"text/html"),n=((e=i.querySelector("title"))==null?void 0:e.innerText)||"";document.title=n;let r=_t('[data-swup-persist]:not([data-swup-persist=""])'),o=t.map(a=>{let l=document.querySelector(a),c=i.querySelector(a);return l&&c?(l.replaceWith(c),!0):(l||console.warn(`[swup] Container missing in current document: ${a}`),c||console.warn(`[swup] Container missing in incoming document: ${a}`),!1)}).filter(Boolean);return r.forEach(a=>{let l=a.getAttribute("data-swup-persist"),c=Et(`[data-swup-persist="${l}"]`);c&&c!==a&&c.replaceWith(a)}),o.length===t.length},Es=function(s){let t={behavior:"auto"},{target:e,reset:i}=s.scroll,n=e!=null?e:s.to.hash,r=!1;return n&&(r=this.hooks.callSync("scroll:anchor",s,{hash:n,options:t},(o,{hash:a,options:l})=>{let c=this.getAnchorElement(a);return c&&c.scrollIntoView(l),!!c})),i&&!r&&(r=this.hooks.callSync("scroll:top",s,{options:t},(o,{options:a})=>(window.scrollTo(R({top:0,left:0},a)),!0))),r},Ss=function(s){return y(this,null,function*(){if(s.done)return;let t=this.hooks.call("animation:in:await",s,{skip:!1},(e,{skip:i})=>{if(!i)return this.awaitAnimations({selector:e.animation.selector})});yield re(),yield this.hooks.call("animation:in:start",s,void 0,()=>{this.classes.remove("is-animating")}),yield t,yield this.hooks.call("animation:in:end",s,void 0)})},Is=function(s,t){return y(this,null,function*(){if(s.done)return;s.advance(6);let{url:e}=t;this.isSameResolvedUrl(P(),e)||(j(e),this.currentPageUrl=P(),s.to.url=this.currentPageUrl),yield this.hooks.call("content:replace",s,{page:t},(i,{page:n})=>{if(this.classes.remove("is-leaving"),i.animation.animate&&this.classes.add("is-rendering"),!this.replaceContent(n,{containers:i.containers}))throw new Error("[swup] Container mismatch, aborting");i.animation.animate&&(this.classes.add("is-changing","is-animating","is-rendering"),i.animation.name&&this.classes.add(`to-${st(i.animation.name)}`))}),yield this.hooks.call("content:scroll",s,void 0,()=>this.scrollToContent(s)),yield this.hooks.call("page:view",s,{url:this.currentPageUrl,title:document.title})})},Os=function(s){var t;if(t=s,Boolean(t==null?void 0:t.isSwupPlugin)){if(s.swup=this,!s._checkRequirements||s._checkRequirements())return s._beforeMount&&s._beforeMount(),s.mount(),this.plugins.push(s),this.plugins}else console.error("Not a swup plugin instance",s)};function _s(s){let t=this.findPlugin(s);if(t)return t.unmount(),t._afterUnmount&&t._afterUnmount(),this.plugins=this.plugins.filter(e=>e!==t),this.plugins;console.error("No such plugin",t)}function Rs(s){return this.plugins.find(t=>t===s||t.name===s||t.name===`Swup${String(s)}`)}function As(s){if(typeof this.options.resolveUrl!="function")return console.warn("[swup] options.resolveUrl expects a callback function."),s;let t=this.options.resolveUrl(s);return t&&typeof t=="string"?t.startsWith("//")||t.startsWith("http")?(console.warn("[swup] options.resolveUrl needs to return a relative url"),s):t:(console.warn("[swup] options.resolveUrl needs to return a url"),s)}function Ts(s,t){return this.resolveUrl(s)===this.resolveUrl(t)}var Cs={animateHistoryBrowsing:!1,animationSelector:'[class*="transition-"]',animationScope:"html",cache:!0,containers:["#swup"],ignoreVisit:(s,{el:t}={})=>!(t==null||!t.closest("[data-no-swup]")),linkSelector:"a[href]",linkToSelf:"scroll",native:!1,plugins:[],resolveUrl:s=>s,requestHeaders:{"X-Requested-With":"swup",Accept:"text/html, application/xhtml+xml"},skipPopStateHandling:s=>{var t;return((t=s.state)==null?void 0:t.source)!=="swup"},timeout:0},et=class{constructor(t={}){var e,i;this.version="4.5.1",this.options=void 0,this.defaults=Cs,this.plugins=[],this.visit=void 0,this.cache=void 0,this.hooks=void 0,this.classes=void 0,this.currentPageUrl=P(),this.currentHistoryIndex=void 0,this.clickDelegate=void 0,this.navigating=!1,this.onVisitEnd=void 0,this.use=Os,this.unuse=_s,this.findPlugin=Rs,this.log=()=>{},this.navigate=vs,this.performNavigation=ws,this.createVisit=ms,this.delegateEvent=us,this.fetchPage=ds,this.awaitAnimations=gs,this.renderPage=Is,this.replaceContent=bs,this.animatePageIn=Ss,this.animatePageOut=ys,this.scrollToContent=Es,this.getAnchorElement=ps,this.getCurrentUrl=P,this.resolveUrl=As,this.isSameResolvedUrl=Ts,this.options=R({},this.defaults,t),this.handleLinkClick=this.handleLinkClick.bind(this),this.handlePopState=this.handlePopState.bind(this),this.cache=new bt(this),this.classes=new St(this),this.hooks=new It(this),this.visit=this.createVisit({to:""}),this.currentHistoryIndex=(e=(i=window.history.state)==null?void 0:i.index)!=null?e:1,this.checkRequirements()&&this.enable()}checkRequirements(){return typeof Promise!="undefined"||(console.warn("Promise is not supported"),!1)}enable(){return y(this,null,function*(){var t;let{linkSelector:e}=this.options;this.clickDelegate=this.delegateEvent(e,"click",this.handleLinkClick),window.addEventListener("popstate",this.handlePopState),this.options.animateHistoryBrowsing&&(window.history.scrollRestoration="manual"),this.options.native=this.options.native&&!!document.startViewTransition,this.options.plugins.forEach(i=>this.use(i)),((t=window.history.state)==null?void 0:t.source)!=="swup"&&j(null,{index:this.currentHistoryIndex}),yield re(),yield this.hooks.call("enable",void 0,void 0,()=>{let i=document.documentElement;i.classList.add("swup-enabled"),i.classList.toggle("swup-native",this.options.native)})})}destroy(){return y(this,null,function*(){this.clickDelegate.destroy(),window.removeEventListener("popstate",this.handlePopState),this.cache.clear(),this.options.plugins.forEach(t=>this.unuse(t)),yield this.hooks.call("disable",void 0,void 0,()=>{let t=document.documentElement;t.classList.remove("swup-enabled"),t.classList.remove("swup-native")}),this.hooks.clear()})}shouldIgnoreVisit(t,{el:e,event:i}={}){let{origin:n,url:r,hash:o}=A.fromUrl(t);return n!==window.location.origin||!(!e||!this.triggerWillOpenNewWindow(e))||!!this.options.ignoreVisit(r+o,{el:e,event:i})}handleLinkClick(t){let e=t.delegateTarget,{href:i,url:n,hash:r}=A.fromElement(e);if(this.shouldIgnoreVisit(i,{el:e,event:t}))return;if(this.navigating&&n===this.visit.to.url)return void t.preventDefault();let o=this.createVisit({to:n,hash:r,el:e,event:t});t.metaKey||t.ctrlKey||t.shiftKey||t.altKey?this.hooks.callSync("link:newtab",o,{href:i}):t.button===0&&this.hooks.callSync("link:click",o,{el:e,event:t},()=>{var a;let l=(a=o.from.url)!=null?a:"";t.preventDefault(),n&&n!==l?this.isSameResolvedUrl(n,l)||this.performNavigation(o):r?this.hooks.callSync("link:anchor",o,{hash:r},()=>{j(n+r),this.scrollToContent(o)}):this.hooks.callSync("link:self",o,void 0,()=>{this.options.linkToSelf==="navigate"?this.performNavigation(o):(j(n),this.scrollToContent(o))})})}handlePopState(t){var e,i,n,r;let o=(e=(i=t.state)==null?void 0:i.url)!=null?e:window.location.href;if(this.options.skipPopStateHandling(t)||this.isSameResolvedUrl(P(),this.currentPageUrl))return;let{url:a,hash:l}=A.fromUrl(o),c=this.createVisit({to:a,hash:l,event:t});c.history.popstate=!0;let h=(n=(r=t.state)==null?void 0:r.index)!=null?n:0;h&&h!==this.currentHistoryIndex&&(c.history.direction=h-this.currentHistoryIndex>0?"forwards":"backwards",this.currentHistoryIndex=h),c.animation.animate=!1,c.scroll.reset=!1,c.scroll.target=!1,this.options.animateHistoryBrowsing&&(c.animation.animate=!0,c.scroll.reset=!0),this.hooks.callSync("history:popstate",c,{event:t},()=>{this.performNavigation(c)})}triggerWillOpenNewWindow(t){return!!t.matches('[download], [target="_blank"]')}};function H(){return H=Object.assign?Object.assign.bind():function(s){for(var t=1;tString(s).split(".").map(t=>String(parseInt(t||"0",10))).concat(["0","0"]).slice(0,3).join("."),it=class{constructor(){this.isSwupPlugin=!0,this.swup=void 0,this.version=void 0,this.requires={},this.handlersToUnregister=[]}mount(){}unmount(){this.handlersToUnregister.forEach(t=>t()),this.handlersToUnregister=[]}_beforeMount(){if(!this.name)throw new Error("You must define a name of plugin when creating a class.")}_afterUnmount(){}_checkRequirements(){return typeof this.requires!="object"||Object.entries(this.requires).forEach(([t,e])=>{if(!function(i,n,r){let o=function(a,l){var c;if(a==="swup")return(c=l.version)!=null?c:"";{var h;let u=l.findPlugin(a);return(h=u==null?void 0:u.version)!=null?h:""}}(i,r);return!!o&&((a,l)=>l.every(c=>{let[,h,u]=c.match(/^([\D]+)?(.*)$/)||[];var d,f;return((p,w)=>{let g={"":m=>m===0,">":m=>m>0,">=":m=>m>=0,"<":m=>m<0,"<=":m=>m<=0};return(g[w]||g[""])(p)})((f=u,d=ae(d=a),f=ae(f),d.localeCompare(f,void 0,{numeric:!0})),h||">=")}))(o,n)}(t,e=Array.isArray(e)?e:[e],this.swup)){let i=`${t} ${e.join(", ")}`;throw new Error(`Plugin version mismatch: ${this.name} requires ${i}`)}}),!0}on(t,e,i={}){var n;e=!(n=e).name.startsWith("bound ")||n.hasOwnProperty("prototype")?e.bind(this):e;let r=this.swup.hooks.on(t,e,i);return this.handlersToUnregister.push(r),r}once(t,e,i={}){return this.on(t,e,H({},i,{once:!0}))}before(t,e,i={}){return this.on(t,e,H({},i,{before:!0}))}replace(t,e,i={}){return this.on(t,e,H({},i,{replace:!0}))}off(t,e){return this.swup.hooks.off(t,e)}};function L(){return L=Object.assign?Object.assign.bind():function(s){for(var t=1;ts==null?s:`\x1B[${t}m${String(s)}\x1B[${e}m`,Rt=s=>he?s:`\u{1F9E9} ${(t=>ue(t,1,22))(s)}`,T=s=>he?s:(t=>ue(t,94,39))(s),At=class{log(...t){let e=t.shift();console.log(Rt(e),...t)}warn(...t){let e=t.shift();console.warn(Rt(e),...t)}error(...t){let e=t.shift();console.error(Rt(e),...t)}logIf(t,...e){t&&this.log(...e)}warnIf(t,...e){t&&this.warn(...e)}errorIf(t,...e){t&&this.error(...e)}},de=s=>{(function({parsedRules:t,swup:e,logger:i}){let n=e.getCurrentUrl();t.filter(r=>r.matchesFrom(n)||r.matchesTo(n)).forEach(r=>{r.containers.forEach(o=>{let a=nt(`${o}:not([data-swup-fragment])`,e);if(!a)return;let l=a.getAttribute("data-swup-fragment-url");l&&E&&(i==null||i.log(`fragment url ${T(l)} for ${T(o)} provided by server`));let{url:c}=A.fromUrl(l||n);a.setAttribute("data-swup-fragment",""),a.__swupFragment={url:c,selector:o}})})})(s),function({logger:t,swup:e}){let i="data-swup-link-to-fragment";document.querySelectorAll(`a[${i}]`).forEach(n=>{var r;let o=n.getAttribute(i);if(!o)return void(E&&(t==null||t.warn(`[${i}] needs to contain a valid fragment selector`)));let a=nt(o,e);if(!a)return void(E&&(t==null||t.log(`ignoring ${T(`[${i}="${o}"]`)} as ${T(o)} is missing`)));let l=(r=a.__swupFragment)==null?void 0:r.url;l?Ct(l,e.getCurrentUrl())?E&&(t==null||t.warn(`The fragment URL of ${o} is identical to the current URL. This could mean that [data-swup-fragment-url] needs to be provided by the server.`)):n.href=l:E&&(t==null||t.warn(`no fragment infos found on ${o}`))})}(s),function({logger:t}){document.querySelectorAll("dialog[data-swup-fragment]").forEach(e=>{e.__swupFragment?e.__swupFragment.modalShown||(e.__swupFragment.modalShown=!0,e.removeAttribute("open"),e.showModal==null||e.showModal(),e.addEventListener("keydown",i=>i.key==="Escape"&&i.preventDefault())):E&&(t==null||t.warn("fragment properties missing on element:",e))})}(s)},fe=(s,t)=>{var e;let i=(e=s.__swupFragment)==null?void 0:e.url;return!!i&&Ct(i,t)},Ct=(s,t)=>le(s)===le(t),le=s=>{if(!s.trim())return s;let t=A.fromUrl(s);return t.searchParams.sort(),t.pathname.replace(/\/+$/g,"")+t.search},me=s=>{let t=s.from.url,e=s.to.url;if(t&&e)return{from:t,to:e}},Mt=(s,t)=>{if(s==null||!s.name)return;let{name:e,containers:i}=s;i.forEach(n=>{var r;(r=document.querySelector(n))==null||r.classList.toggle(`to-${e}`,t)})},pe=(s,t)=>t.find(e=>e.matches(s));function ge(s){return!!s&&s.containers.every(t=>{var e;return((e=document.querySelector(t))==null||(e=e.tagName)==null?void 0:e.toLowerCase())==="template"})}function nt(s,t){for(let e of t.options.containers){let i=document.querySelector(e);if(i!=null&&i.matches(s))return i;let n=i==null?void 0:i.querySelector(s);if(n)return n}}function ce(s){if(!Array.isArray(s))throw new Error("cloneRules() expects an array of rules");return s.map(t=>L({},t,{from:Array.isArray(t.from)?[...t.from]:t.from,to:Array.isArray(t.to)?[...t.to]:t.to,containers:[...t.containers]}))}var Tt=class{constructor(t){var e,i;this.matchesFrom=void 0,this.matchesTo=void 0,this.swup=void 0,this.from=void 0,this.to=void 0,this.containers=void 0,this.name=void 0,this.scroll=!1,this.focus=void 0,this.logger=void 0,this.swup=t.swup,this.logger=t.logger,this.from=t.from||"",this.to=t.to||"",t.name&&(this.name=st(t.name)),t.scroll!==void 0&&(this.scroll=t.scroll),t.focus!==void 0&&(this.focus=t.focus),this.containers=this.parseContainers(t.containers),E&&((e=this.logger)==null||e.errorIf(!this.to,"Every fragment rule must contain a 'to' path",this),(i=this.logger)==null||i.errorIf(!this.from,"Every fragment rule must contain a 'from' path",this)),this.matchesFrom=Ot(this.from),this.matchesTo=Ot(this.to)}parseContainers(t){var e,i;return Array.isArray(t)&&t.length?(i=t.map(n=>n.trim()),[...new Set(i)]).filter(n=>{var r;let o=this.validateSelector(n);return(r=this.logger)==null||r.errorIf(o instanceof Error,o),o===!0}):(E&&((e=this.logger)==null||e.error("Every fragment rule must contain an array of containers",this.getDebugInfo())),[])}validateSelector(t){return t.startsWith("#")?!t.match(/\s|>/)||new Error(`fragment selectors must not be nested: ${t}`):new Error(`fragment selectors must be IDs: ${t}`)}getDebugInfo(){let{from:t,to:e,containers:i}=this;return{from:String(t),to:String(e),containers:String(i)}}matches(t){let{url:e}=A.fromUrl(t.from),{url:i}=A.fromUrl(t.to);if(!this.matchesFrom(e)||!this.matchesTo(i))return!1;for(let r of this.containers){let o=this.validateFragmentSelectorForMatch(r);var n;if(o instanceof Error)return E&&((n=this.logger)==null||n.error(o,this.getDebugInfo())),!1}return!0}validateFragmentSelectorForMatch(t){return document.querySelector(t)?!!nt(t,this.swup)||new Error(`skipping rule since ${T(t)} is outside of swup's default containers`):new Error(`skipping rule since ${T(t)} doesn't exist in the current document`)}},Ms=function(s){let t=me(s);t&&pe(t,this.parsedRules)&&(s.scroll.reset=!1)},ks=function(s){return y(this,null,function*(){let t=me(s);if(!t)return;let e=this.getFragmentVisit(t);if(!e)return;var i;s.fragmentVisit=e,E&&((i=this.logger)==null||i.log(`fragment visit: ${T(s.fragmentVisit.containers.join(", "))}`)),s.scroll=function(o,a){return typeof o.scroll=="boolean"?L({},a,{reset:o.scroll}):typeof o.scroll!="string"||a.target?a:L({},a,{target:o.scroll})}(e,s.scroll);let n=s.a11y;var r;e.focus!==void 0&&(E&&((r=this.logger)==null||r.errorIf(!n,"Can't set visit.a11y.focus. Is @swup/a11y-plugin installed?")),n&&(n.focus=e.focus)),s.animation.scope=s.fragmentVisit.containers,s.containers=s.fragmentVisit.containers,s.animation.selector=s.fragmentVisit.containers.join(","),Mt(e,!0)})},xs=function(s,t){var e,i;s.fragmentVisit&&ge(s.fragmentVisit)&&(E&&((e=this.logger)==null||e.log(`${T("out")}-animation skipped for ${T((i=s.fragmentVisit)==null?void 0:i.containers.toString())}`)),t.skip=!0)},Ps=function(s,t){var e,i;s.fragmentVisit&&ge(s.fragmentVisit)&&(E&&((e=this.logger)==null||e.log(`${T("in")}-animation skipped for ${T((i=s.fragmentVisit)==null?void 0:i.containers.toString())}`)),t.skip=!0)},$s=function(s,t){var e;if(s.trigger.el||!s.to.url)return;let i=this.swup.cache.get(s.to.url);i&&i.fragmentHtml&&(t.page.html=i.fragmentHtml,E&&((e=this.logger)==null||e.log(`fragment cache used for ${T(s.to.url)}`)))},Ls=function(s){Mt(s.fragmentVisit,!0),de(this),(({swup:t,logger:e})=>{let i=t.getCurrentUrl(),n=t.cache,r=n.get(i);if(!r)return;let o=new DOMParser().parseFromString(r.html,"text/html"),a=[],l=Array.from(document.querySelectorAll("[data-swup-fragment]")).filter(c=>!c.matches("template")&&!fe(c,i));l.length&&(t.options.cache?(l.forEach(c=>{var h,u;if(c.querySelector("[data-swup-fragment]")!=null)return;let d=(h=c.__swupFragment)==null?void 0:h.url;if(!d)return void(E&&(e==null||e.warn("no fragment url found:",c)));let f=(u=c.__swupFragment)==null?void 0:u.selector;if(!f)return void(E&&(e==null||e.warn("no fragment selector found:",c)));let p=n.get(d);if(!p)return;let w=o.querySelector(f);if(!w)return;let g=new DOMParser().parseFromString(p.html,"text/html").querySelector(f);g&&(g.setAttribute("data-swup-fragment-url",d),w.replaceWith(g),a.push(c))}),a.length&&(n.update(i,L({},r,{fragmentHtml:o.documentElement.outerHTML})),a.forEach(c=>{var h,u;let d=((h=c.__swupFragment)==null?void 0:h.url)||"",f=((u=c.__swupFragment)==null?void 0:u.selector)||"";E&&(e==null||e.log(`updated cache with ${T(f)} from ${T(d)}`))}))):E&&(e==null||e.warn("can't cache foreign fragment elements without swup's cache")))})(this)},Us=function(s){Mt(s.fragmentVisit,!1)},rt=class extends it{get parsedRules(){return this._parsedRules}constructor(t){super(),this.name="SwupFragmentPlugin",this.requires={swup:">=4"},this._rawRules=[],this._parsedRules=[],this.options=void 0,this.defaults={rules:[],debug:!1},this.logger=void 0,this.options=L({},this.defaults,t)}mount(){let t=this.swup;var e;this.setRules(this.options.rules),E&&this.options.debug&&(this.logger=new At),this.before("link:self",Ms),this.on("visit:start",ks),this.before("animation:out:await",xs),this.before("animation:in:await",Ps),this.before("content:replace",$s),this.on("content:replace",Ls),this.on("visit:end",Us),E&&((e=this.logger)==null||e.warnIf(!t.options.cache,"fragment caching will only work with swup's cache being active")),de(this)}unmount(){super.unmount(),document.querySelectorAll("[data-swup-fragment]").forEach(t=>{t.removeAttribute("data-swup-fragment-url"),delete t.__swupFragment})}setRules(t){var e;this._rawRules=ce(t),this._parsedRules=t.map(i=>this.parseRule(i)),E&&((e=this.logger)==null||e.log("Updated fragment rules",this.getRules()))}getRules(){return ce(this._rawRules)}prependRule(t){this.setRules([t,...this.getRules()])}appendRule(t){this.setRules([...this.getRules(),t])}parseRule({from:t,to:e,containers:i,name:n,scroll:r,focus:o}){return new Tt({from:t,to:e,containers:i,name:n,scroll:r,focus:o,logger:this.logger,swup:this.swup})}getFragmentVisit(t){let e=pe(t,this.parsedRules);if(!e)return;let i=((a,l,c,h)=>{let u=Ct(a.from,a.to);return l.filter(d=>{let f=document.querySelector(d);return f?nt(d,c)?!(!u&&fe(f,a.to)&&(E&&(h==null||h.log(`ignoring fragment ${T(d)} as it already matches the current URL`)),1)):(E&&(h==null||h.error(`${T(d)} is outside of swup's default containers`)),!1):(E&&(h==null||h.log(`${T(d)} missing in current document`)),!1)})})(t,e.containers,this.swup,this.logger);if(!i.length)return;let{name:n,scroll:r,focus:o}=e;return{containers:i,name:n,scroll:r,focus:o}}};var ot=class extends U{constructor(s){super(s)}init(){let s=new et({containers:["[data-load-container]"],plugins:[new rt({rules:[{from:["/projects/:page?"],to:["/projects/:page?"],containers:["#paginated"]},{from:["/projects/:page?"],to:["/project/:slug"],containers:["#modal"],name:"open-modal"},{from:["/project/:slug"],to:["/project/:slug"],containers:["#modal"],name:"modal-update"},{from:["/project/:slug"],to:["/projects/:page?"],containers:["#modal","#paginated"],name:"close-modal"}]})]});s.hooks.before("content:replace",t=>y(this,null,function*(){console.log("before content replace:",t);for(let e of t.containers){let i=this.el.querySelector(e);console.log("old container: ",i),this.call("destroy",i,"app")}})),s.hooks.on("content:replace",t=>{console.log("On content replace:",t),t.fragmentVisit&&(t.fragmentVisit.name=="open-modal"?(this.call("populate",document.getElementById("modal"),"Dialog"),this.call("show",null,"Dialog")):t.fragmentVisit.name=="close-modal"&&this.call("close",null,"Dialog"));for(let e of t.containers){let i=this.el.querySelector(e);console.log("new container: ",i),i.classList.add("transition-fade"),this.call("update",i,"app")}}),console.log(this,s)}};var kt="production",ve=window.matchMedia("(any-pointer:coarse)").matches,W=Object.freeze({NAME:kt,IS_PROD:kt==="production",IS_DEV:kt==="development",IS_MOBILE:ve,IS_DESKTOP:!ve}),k=Object.freeze({LOADING:"is-loading",LOADED:"is-loaded",READY:"is-ready",FONTS_LOADED:"fonts-loaded",LAZY_CONTAINER:"c-lazy",LAZY_LOADED:"-lazy-loaded"}),we=Object.freeze({RESIZE_END:"loco.resizeEnd"}),ye=Object.freeze({EAGER:[{family:"Source Sans",style:"normal",weight:400},{family:"Source Sans",style:"normal",weight:700}]});var Fs=s=>({url:s.src,width:s.naturalWidth,height:s.naturalHeight,ratio:s.naturalWidth/s.naturalHeight}),zs=(s,t={})=>new Promise((e,i)=>{let n=new Image;t.crossOrigin&&(n.crossOrigin=t.crossOrigin);let r=()=>{e(qt({element:n},Fs(n)))};n.decode?(n.src=s,n.decode().then(r).catch(o=>{i(o)})):(n.onload=r,n.onerror=o=>{i(o)},n.src=s)}),be=[],Ee=(s,t,e)=>y(void 0,null,function*(){let i=t||s.dataset.src,n=be.find(r=>r.url===i);if(!n){if(n=yield zs(i),!n.url)return;be.push(n)}s.src!==i&&(s.tagName==="IMG"?s.src=n.url:s.style.backgroundImage=`url(${n.url})`,requestAnimationFrame(()=>{let r=s.closest(`.${k.LAZY_CONTAINER}`);r&&(r.classList.add(k.LAZY_LOADED),r.style.backgroundImage=""),s.classList.add(k.LAZY_LOADED),e==null||e()}))});function xt(){return xt=Object.assign?Object.assign.bind():function(s){for(var t=1;t=1;let l=i?1:this.easing(a);this.value=this.from+(this.to-this.from)*l}var n,r,o;(e=this.onUpdate)==null||e.call(this,this.value,i),i&&this.stop()}stop(){this.isRunning=!1}fromTo(t,e,{lerp:i=.1,duration:n=1,easing:r=l=>l,onStart:o,onUpdate:a}){this.from=this.value=t,this.to=e,this.lerp=i,this.duration=n,this.easing=r,this.currentTime=0,this.isRunning=!0,o==null||o(),this.onUpdate=a}},$t=class{constructor({wrapper:t,content:e,autoResize:i=!0}={}){if(this.resize=()=>{this.onWrapperResize(),this.onContentResize()},this.onWrapperResize=()=>{this.wrapper===window?(this.width=window.innerWidth,this.height=window.innerHeight):(this.width=this.wrapper.clientWidth,this.height=this.wrapper.clientHeight)},this.onContentResize=()=>{this.scrollHeight=this.content.scrollHeight,this.scrollWidth=this.content.scrollWidth},this.wrapper=t,this.content=e,i){let n=function(r,o){let a;return function(){let l=arguments,c=this;clearTimeout(a),a=setTimeout(function(){r.apply(c,l)},250)}}(this.resize);this.wrapper!==window&&(this.wrapperResizeObserver=new ResizeObserver(n),this.wrapperResizeObserver.observe(this.wrapper)),this.contentResizeObserver=new ResizeObserver(n),this.contentResizeObserver.observe(this.content)}this.resize()}destroy(){var t,e;(t=this.wrapperResizeObserver)==null||t.disconnect(),(e=this.contentResizeObserver)==null||e.disconnect()}get limit(){return{x:this.scrollWidth-this.width,y:this.scrollHeight-this.height}}},lt=class{constructor(){this.events={}}emit(t,...e){let i=this.events[t]||[];for(let n=0,r=i.length;n{var n;this.events[t]=(n=this.events[t])==null?void 0:n.filter(r=>e!==r)}}off(t,e){var i;this.events[t]=(i=this.events[t])==null?void 0:i.filter(n=>e!==n)}destroy(){this.events={}}},Lt=class{constructor(t,{wheelMultiplier:e=1,touchMultiplier:i=2,normalizeWheel:n=!1}){this.onTouchStart=r=>{let{clientX:o,clientY:a}=r.targetTouches?r.targetTouches[0]:r;this.touchStart.x=o,this.touchStart.y=a,this.lastDelta={x:0,y:0}},this.onTouchMove=r=>{let{clientX:o,clientY:a}=r.targetTouches?r.targetTouches[0]:r,l=-(o-this.touchStart.x)*this.touchMultiplier,c=-(a-this.touchStart.y)*this.touchMultiplier;this.touchStart.x=o,this.touchStart.y=a,this.lastDelta={x:l,y:c},this.emitter.emit("scroll",{deltaX:l,deltaY:c,event:r})},this.onTouchEnd=r=>{this.emitter.emit("scroll",{deltaX:this.lastDelta.x,deltaY:this.lastDelta.y,event:r})},this.onWheel=r=>{let{deltaX:o,deltaY:a}=r;this.normalizeWheel&&(o=at(-100,o,100),a=at(-100,a,100)),o*=this.wheelMultiplier,a*=this.wheelMultiplier,this.emitter.emit("scroll",{deltaX:o,deltaY:a,event:r})},this.element=t,this.wheelMultiplier=e,this.touchMultiplier=i,this.normalizeWheel=n,this.touchStart={x:null,y:null},this.emitter=new lt,this.element.addEventListener("wheel",this.onWheel,{passive:!1}),this.element.addEventListener("touchstart",this.onTouchStart,{passive:!1}),this.element.addEventListener("touchmove",this.onTouchMove,{passive:!1}),this.element.addEventListener("touchend",this.onTouchEnd,{passive:!1})}on(t,e){return this.emitter.on(t,e)}destroy(){this.emitter.destroy(),this.element.removeEventListener("wheel",this.onWheel,{passive:!1}),this.element.removeEventListener("touchstart",this.onTouchStart,{passive:!1}),this.element.removeEventListener("touchmove",this.onTouchMove,{passive:!1}),this.element.removeEventListener("touchend",this.onTouchEnd,{passive:!1})}},ct=class{constructor({wrapper:t=window,content:e=document.documentElement,wheelEventsTarget:i=t,eventsTarget:n=i,smoothWheel:r=!0,smoothTouch:o=!1,syncTouch:a=!1,syncTouchLerp:l=.1,__iosNoInertiaSyncTouchLerp:c=.4,touchInertiaMultiplier:h=35,duration:u,easing:d=b=>Math.min(1,1.001-Math.pow(2,-10*b)),lerp:f=!u&&.1,infinite:p=!1,orientation:w="vertical",gestureOrientation:g="vertical",touchMultiplier:m=1,wheelMultiplier:I=1,normalizeWheel:O=!1,autoResize:v=!0}={}){this.onVirtualScroll=({deltaX:b,deltaY:S,event:_})=>{if(_.ctrlKey)return;let C=_.type.includes("touch"),M=_.type.includes("wheel");if(this.options.gestureOrientation==="both"&&b===0&&S===0||this.options.gestureOrientation==="vertical"&&S===0||this.options.gestureOrientation==="horizontal"&&b===0||C&&this.options.gestureOrientation==="vertical"&&this.scroll===0&&!this.options.infinite&&S<=0)return;let x=_.composedPath();if(x=x.slice(0,x.indexOf(this.rootElement)),x.find($=>{var jt;return($.hasAttribute==null?void 0:$.hasAttribute("data-lenis-prevent"))||C&&($.hasAttribute==null?void 0:$.hasAttribute("data-lenis-prevent-touch"))||M&&($.hasAttribute==null?void 0:$.hasAttribute("data-lenis-prevent-wheel"))||((jt=$.classList)==null?void 0:jt.contains("lenis"))}))return;if(this.isStopped||this.isLocked)return void _.preventDefault();if(this.isSmooth=(this.options.smoothTouch||this.options.syncTouch)&&C||this.options.smoothWheel&&M,!this.isSmooth)return this.isScrolling=!1,void this.animate.stop();_.preventDefault();let V=S;this.options.gestureOrientation==="both"?V=Math.abs(S)>Math.abs(b)?S:b:this.options.gestureOrientation==="horizontal"&&(V=b);let ze=C&&this.options.syncTouch,Nt=C&&_.type==="touchend"&&Math.abs(V)>1;Nt&&(V=this.velocity*this.options.touchInertiaMultiplier),this.scrollTo(this.targetScroll+V,xt({programmatic:!1},ze&&{lerp:Nt?this.syncTouchLerp:this.options.__iosNoInertiaSyncTouchLerp}))},this.onScroll=()=>{if(!this.isScrolling){let b=this.animatedScroll;this.animatedScroll=this.targetScroll=this.actualScroll,this.velocity=0,this.direction=Math.sign(this.animatedScroll-b),this.emit()}},window.lenisVersion="1.0.27",t!==document.documentElement&&t!==document.body||(t=window),this.options={wrapper:t,content:e,wheelEventsTarget:i,eventsTarget:n,smoothWheel:r,smoothTouch:o,syncTouch:a,syncTouchLerp:l,__iosNoInertiaSyncTouchLerp:c,touchInertiaMultiplier:h,duration:u,easing:d,lerp:f,infinite:p,gestureOrientation:g,orientation:w,touchMultiplier:m,wheelMultiplier:I,normalizeWheel:O,autoResize:v},this.animate=new Pt,this.emitter=new lt,this.dimensions=new $t({wrapper:t,content:e,autoResize:v}),this.toggleClass("lenis",!0),this.velocity=0,this.isLocked=!1,this.isStopped=!1,this.isSmooth=a||r||o,this.isScrolling=!1,this.targetScroll=this.animatedScroll=this.actualScroll,this.options.wrapper.addEventListener("scroll",this.onScroll,{passive:!1}),this.virtualScroll=new Lt(n,{touchMultiplier:m,wheelMultiplier:I,normalizeWheel:O}),this.virtualScroll.on("scroll",this.onVirtualScroll)}destroy(){this.emitter.destroy(),this.options.wrapper.removeEventListener("scroll",this.onScroll,{passive:!1}),this.virtualScroll.destroy(),this.dimensions.destroy(),this.toggleClass("lenis",!1),this.toggleClass("lenis-smooth",!1),this.toggleClass("lenis-scrolling",!1),this.toggleClass("lenis-stopped",!1),this.toggleClass("lenis-locked",!1)}on(t,e){return this.emitter.on(t,e)}off(t,e){return this.emitter.off(t,e)}setScroll(t){this.isHorizontal?this.rootElement.scrollLeft=t:this.rootElement.scrollTop=t}resize(){this.dimensions.resize()}emit(){this.emitter.emit("scroll",this)}reset(){this.isLocked=!1,this.isScrolling=!1,this.velocity=0,this.animate.stop()}start(){this.isStopped=!1,this.reset()}stop(){this.isStopped=!0,this.animate.stop(),this.reset()}raf(t){let e=t-(this.time||t);this.time=t,this.animate.advance(.001*e)}scrollTo(t,{offset:e=0,immediate:i=!1,lock:n=!1,duration:r=this.options.duration,easing:o=this.options.easing,lerp:a=!r&&this.options.lerp,onComplete:l=null,force:c=!1,programmatic:h=!0}={}){if(!this.isStopped&&!this.isLocked||c){if(["top","left","start"].includes(t))t=0;else if(["bottom","right","end"].includes(t))t=this.limit;else{var u;let d;if(typeof t=="string"?d=document.querySelector(t):(u=t)!=null&&u.nodeType&&(d=t),d){if(this.options.wrapper!==window){let p=this.options.wrapper.getBoundingClientRect();e-=this.isHorizontal?p.left:p.top}let f=d.getBoundingClientRect();t=(this.isHorizontal?f.left:f.top)+this.animatedScroll}}if(typeof t=="number"){if(t+=e,t=Math.round(t),this.options.infinite?h&&(this.targetScroll=this.animatedScroll=this.scroll):t=at(0,t,this.limit),i)return this.animatedScroll=this.targetScroll=t,this.setScroll(this.scroll),this.reset(),void(l==null||l(this));if(!h){if(t===this.targetScroll)return;this.targetScroll=t}this.animate.fromTo(this.animatedScroll,t,{duration:r,easing:o,lerp:a,onStart:()=>{n&&(this.isLocked=!0),this.isScrolling=!0},onUpdate:(d,f)=>{this.isScrolling=!0,this.velocity=d-this.animatedScroll,this.direction=Math.sign(this.velocity),this.animatedScroll=d,this.setScroll(this.scroll),h&&(this.targetScroll=d),f||this.emit(),f&&requestAnimationFrame(()=>{this.reset(),this.emit(),l==null||l(this)})}})}}}get rootElement(){return this.options.wrapper===window?this.options.content:this.options.wrapper}get limit(){return this.dimensions.limit[this.isHorizontal?"x":"y"]}get isHorizontal(){return this.options.orientation==="horizontal"}get actualScroll(){return this.isHorizontal?this.rootElement.scrollLeft:this.rootElement.scrollTop}get scroll(){return this.options.infinite?(this.animatedScroll%(t=this.limit)+t)%t:this.animatedScroll;var t}get progress(){return this.limit===0?1:this.scroll/this.limit}get isSmooth(){return this.__isSmooth}set isSmooth(t){this.__isSmooth!==t&&(this.__isSmooth=t,this.toggleClass("lenis-smooth",t))}get isScrolling(){return this.__isScrolling}set isScrolling(t){this.__isScrolling!==t&&(this.__isScrolling=t,this.toggleClass("lenis-scrolling",t))}get isStopped(){return this.__isStopped}set isStopped(t){this.__isStopped!==t&&(this.__isStopped=t,this.toggleClass("lenis-stopped",t))}get isLocked(){return this.__isLocked}set isLocked(t){this.__isLocked!==t&&(this.__isLocked=t,this.toggleClass("lenis-locked",t))}get className(){let t="lenis";return this.isStopped&&(t+=" lenis-stopped"),this.isLocked&&(t+=" lenis-locked"),this.isScrolling&&(t+=" lenis-scrolling"),this.isSmooth&&(t+=" lenis-smooth"),t}toggleClass(t,e){this.rootElement.classList.toggle(t,e),this.emitter.emit("className change",this)}};function Ut(){return Ut=Object.assign?Object.assign.bind():function(s){for(var t=1;t{t.forEach(e=>{let i=this.scrollElements.find(n=>n.$el===e.target);e.isIntersecting?(i&&(i.isAlreadyIntersected=!0),this._setInview(e)):i&&i.isAlreadyIntersected&&this._setOutOfView(e)})},{rootMargin:this.rootMargin});for(let t of this.scrollElements)this.observe(t.$el)}destroy(){this.observer.disconnect()}observe(t){t&&this.observer.observe(t)}unobserve(t){t&&this.observer.unobserve(t)}_setInview(t){let e=this.scrollElements.find(i=>i.$el===t.target);this.IORaf&&(e==null||e.setInteractivityOn()),!this.IORaf&&(e==null||e.setInview())}_setOutOfView(t){let e=this.scrollElements.find(i=>i.$el===t.target);this.IORaf&&(e==null||e.setInteractivityOff()),!this.IORaf&&(e==null||e.setOutOfView()),e!=null&&e.attributes.scrollRepeat||this.IORaf||this.unobserve(t.target)}};function Se(s,t,e,i,n){return e+((n-s)/(t-s)*(i-e)||0)}function Ie(s,t){return s.reduce((e,i)=>Math.abs(i-t)1?1:i;var i;if(this.progress=e,e!=this.lastProgress){if(this.lastProgress=e,this.attributes.scrollCssProgress&&this._setCssProgress(e),this.attributes.scrollEventProgress&&this._setCustomEventProgress(e),this.attributes.scrollModuleProgress)for(let n of this.progressModularModules)this.modularInstance&&this.modularInstance.call("onScrollProgress",e,n.moduleName,n.moduleId);e>0&&e<1&&this.setInview(),e===0&&this.setOutOfView(),e===1&&this.setOutOfView()}}_setCssProgress(t=0){this.$el.style.setProperty("--progress",t.toString())}_setCustomEventProgress(t=0){let e=this.attributes.scrollEventProgress;if(!e)return;let i=new CustomEvent(e,{detail:{target:this.$el,progress:t}});window.dispatchEvent(i)}_getProgressModularModules(){if(!this.modularInstance)return;let t=Object.keys(this.$el.dataset).filter(i=>i.includes("module")),e=Object.entries(this.modularInstance.modules);if(t.length)for(let i of t){let n=this.$el.dataset[i];if(!n)return;for(let r of e){let[o,a]=r;n in a&&this.progressModularModules.push({moduleName:o,moduleId:n})}}}_getScrollCallFrom(){let t=Ie([this.intersection.start,this.intersection.end],this.currentScroll);return this.intersection.start===t?"start":"end"}_dispatchCall(t,e){var i,n;let r=(i=this.attributes.scrollCall)==null?void 0:i.split(","),o=(n=this.attributes)==null?void 0:n.scrollCallSelf;if(r&&r.length>1){var a;let[l,c,h]=r,u;u=o?this.$el.dataset[`module${c.trim()}`]:h,this.modularInstance&&this.modularInstance.call(l.trim(),{target:this.$el,way:t,from:e},c.trim(),(a=u)==null?void 0:a.trim())}else if(r){let[l]=r,c=new CustomEvent(l,{detail:{target:this.$el,way:t,from:e}});window.dispatchEvent(c)}}},Ds=["scrollOffset","scrollPosition","scrollModuleProgress","scrollCssProgress","scrollEventProgress","scrollSpeed"],zt=class{constructor({$el:t,modularInstance:e,triggerRootMargin:i,rafRootMargin:n,scrollOrientation:r}){this.$scrollContainer=void 0,this.modularInstance=void 0,this.triggerRootMargin=void 0,this.rafRootMargin=void 0,this.scrollElements=void 0,this.triggeredScrollElements=void 0,this.RAFScrollElements=void 0,this.scrollElementsToUpdate=void 0,this.IOTriggerInstance=void 0,this.IORafInstance=void 0,this.scrollOrientation=void 0,t?(this.$scrollContainer=t,this.modularInstance=e,this.scrollOrientation=r,this.triggerRootMargin=i!=null?i:"-1px -1px -1px -1px",this.rafRootMargin=n!=null?n:"100% 100% 100% 100%",this.scrollElements=[],this.triggeredScrollElements=[],this.RAFScrollElements=[],this.scrollElementsToUpdate=[],this._init()):console.error("Please provide a DOM Element as scrollContainer")}_init(){let t=this.$scrollContainer.querySelectorAll("[data-scroll]"),e=Array.from(t);this._subscribeScrollElements(e),this.IOTriggerInstance=new ht({scrollElements:[...this.triggeredScrollElements],rootMargin:this.triggerRootMargin,IORaf:!1}),this.IORafInstance=new ht({scrollElements:[...this.RAFScrollElements],rootMargin:this.rafRootMargin,IORaf:!0})}destroy(){this.IOTriggerInstance.destroy(),this.IORafInstance.destroy(),this._unsubscribeAllScrollElements()}onResize({currentScroll:t}){for(let e of this.RAFScrollElements)e.onResize({currentScroll:t})}onRender({currentScroll:t,smooth:e}){for(let i of this.scrollElementsToUpdate)i.onRender({currentScroll:t,smooth:e})}removeScrollElements(t){let e=t.querySelectorAll("[data-scroll]");if(e.length){for(let i=0;i-1&&(this.IOTriggerInstance.unobserve(n.$el),this.triggeredScrollElements.splice(i,1))}for(let i=0;i-1&&(this.IORafInstance.unobserve(n.$el),this.RAFScrollElements.splice(i,1))}e.forEach(i=>{let n=this.scrollElementsToUpdate.find(o=>o.$el===i),r=this.scrollElements.find(o=>o.$el===i);n&&this._unsubscribeElementUpdate(n),r&&(this.scrollElements=this.scrollElements.filter(o=>o.id!=r.id))})}}addScrollElements(t){let e=t.querySelectorAll("[data-scroll]"),i=[];this.scrollElements.forEach(o=>{i.push(o.id)});let n=Math.max(...i)+1,r=Array.from(e);this._subscribeScrollElements(r,n,!0)}_subscribeScrollElements(t,e=0,i=!1){for(let n=0;ne.id!=t.id)}_checkRafNeeded(t){let e=[...Ds],i=n=>{e=e.filter(r=>r!=n)};if(t.dataset.scrollOffset){if(t.dataset.scrollOffset.split(",").map(n=>n.replace("%","").trim()).join(",")!="0,0")return!0;i("scrollOffset")}else i("scrollOffset");if(t.dataset.scrollPosition){if(t.dataset.scrollPosition.trim()!="top,bottom")return!0;i("scrollPosition")}else i("scrollPosition");if(t.dataset.scrollSpeed&&!isNaN(parseFloat(t.dataset.scrollSpeed)))return!0;i("scrollSpeed");for(let n of e)if(n in t.dataset)return!0;return!1}},Dt=class{constructor({resizeElements:t,resizeCallback:e=()=>{}}){this.$resizeElements=void 0,this.isFirstObserve=void 0,this.observer=void 0,this.resizeCallback=void 0,this.$resizeElements=t,this.resizeCallback=e,this.isFirstObserve=!0,this._init()}_init(){this.observer=new ResizeObserver(t=>{var e;!this.isFirstObserve&&((e=this.resizeCallback)==null||e.call(this)),this.isFirstObserve=!1});for(let t of this.$resizeElements)this.observer.observe(t)}destroy(){this.observer.disconnect()}},Oe={wrapper:window,content:document.documentElement,eventsTarget:window,lerp:.1,duration:.75,orientation:"vertical",gestureOrientation:"vertical",smoothWheel:!0,smoothTouch:!1,syncTouch:!1,syncTouchLerp:.1,touchInertiaMultiplier:35,wheelMultiplier:1,touchMultiplier:2,normalizeWheel:!1,autoResize:!0,easing:s=>Math.min(1,1.001-Math.pow(2,-10*s))},ut=class{constructor({lenisOptions:t={},modularInstance:e,triggerRootMargin:i,rafRootMargin:n,autoResize:r=!0,autoStart:o=!0,scrollCallback:a=()=>{},initCustomTicker:l,destroyCustomTicker:c}={}){this.rafPlaying=void 0,this.lenisInstance=void 0,this.coreInstance=void 0,this.lenisOptions=void 0,this.modularInstance=void 0,this.triggerRootMargin=void 0,this.rafRootMargin=void 0,this.rafInstance=void 0,this.autoResize=void 0,this.autoStart=void 0,this.ROInstance=void 0,this.initCustomTicker=void 0,this.destroyCustomTicker=void 0,this._onRenderBind=void 0,this._onResizeBind=void 0,this._onScrollToBind=void 0,this.lenisOptions=Ut({},Oe,t),Object.assign(this,{lenisOptions:t,modularInstance:e,triggerRootMargin:i,rafRootMargin:n,autoResize:r,autoStart:o,scrollCallback:a,initCustomTicker:l,destroyCustomTicker:c}),this._onRenderBind=this._onRender.bind(this),this._onScrollToBind=this._onScrollTo.bind(this),this._onResizeBind=this._onResize.bind(this),this.rafPlaying=!1,this._init()}_init(){var t;this.lenisInstance=new ct({wrapper:this.lenisOptions.wrapper,content:this.lenisOptions.content,eventsTarget:this.lenisOptions.eventsTarget,lerp:this.lenisOptions.lerp,duration:this.lenisOptions.duration,orientation:this.lenisOptions.orientation,gestureOrientation:this.lenisOptions.gestureOrientation,smoothWheel:this.lenisOptions.smoothWheel,smoothTouch:this.lenisOptions.smoothTouch,syncTouch:this.lenisOptions.syncTouch,syncTouchLerp:this.lenisOptions.syncTouchLerp,touchInertiaMultiplier:this.lenisOptions.touchInertiaMultiplier,wheelMultiplier:this.lenisOptions.wheelMultiplier,touchMultiplier:this.lenisOptions.touchMultiplier,normalizeWheel:this.lenisOptions.normalizeWheel,easing:this.lenisOptions.easing}),(t=this.lenisInstance)==null||t.on("scroll",this.scrollCallback),document.documentElement.setAttribute("data-scroll-orientation",this.lenisInstance.options.orientation),requestAnimationFrame(()=>{this.coreInstance=new zt({$el:this.lenisInstance.rootElement,modularInstance:this.modularInstance,triggerRootMargin:this.triggerRootMargin,rafRootMargin:this.rafRootMargin,scrollOrientation:this.lenisInstance.options.orientation}),this._bindEvents(),this.initCustomTicker&&!this.destroyCustomTicker?console.warn("initCustomTicker callback is declared, but destroyCustomTicker is not. Please pay attention. It could cause trouble."):!this.initCustomTicker&&this.destroyCustomTicker&&console.warn("destroyCustomTicker callback is declared, but initCustomTicker is not. Please pay attention. It could cause trouble."),this.autoStart&&this.start()})}destroy(){this.stop(),this._unbindEvents(),this.lenisInstance.destroy(),this.coreInstance.destroy()}_bindEvents(){this._bindScrollToEvents(),this.autoResize&&("ResizeObserver"in window?this.ROInstance=new Dt({resizeElements:[document.body],resizeCallback:this._onResizeBind}):window.addEventListener("resize",this._onResizeBind))}_unbindEvents(){this._unbindScrollToEvents(),this.autoResize&&("ResizeObserver"in window?this.ROInstance&&this.ROInstance.destroy():window.removeEventListener("resize",this._onResizeBind))}_bindScrollToEvents(t){let e=t||this.lenisInstance.rootElement,i=e==null?void 0:e.querySelectorAll("[data-scroll-to]");i!=null&&i.length&&i.forEach(n=>{n.addEventListener("click",this._onScrollToBind,!1)})}_unbindScrollToEvents(t){let e=t||this.lenisInstance.rootElement,i=e==null?void 0:e.querySelectorAll("[data-scroll-to]");i!=null&&i.length&&i.forEach(n=>{n.removeEventListener("click",this._onScrollToBind,!1)})}_onResize(){requestAnimationFrame(()=>{var t;(t=this.coreInstance)==null||t.onResize({currentScroll:this.lenisInstance.scroll})})}_onRender(){var t,e;(t=this.lenisInstance)==null||t.raf(Date.now()),(e=this.coreInstance)==null||e.onRender({currentScroll:this.lenisInstance.scroll,smooth:this.lenisInstance.isSmooth})}_onScrollTo(t){var e;t.preventDefault();let i=(e=t.currentTarget)!=null?e:null;if(!i)return;let n=i.getAttribute("data-scroll-to-href")||i.getAttribute("href"),r=i.getAttribute("data-scroll-to-offset")||0,o=i.getAttribute("data-scroll-to-duration")||this.lenisOptions.duration||Oe.duration;n&&this.scrollTo(n,{offset:typeof r=="string"?parseInt(r):r,duration:typeof o=="string"?parseInt(o):o})}start(){var t;this.rafPlaying||((t=this.lenisInstance)==null||t.start(),this.rafPlaying=!0,this.initCustomTicker?this.initCustomTicker(this._onRenderBind):this._raf())}stop(){var t;this.rafPlaying&&((t=this.lenisInstance)==null||t.stop(),this.rafPlaying=!1,this.destroyCustomTicker?this.destroyCustomTicker(this._onRenderBind):this.rafInstance&&cancelAnimationFrame(this.rafInstance))}removeScrollElements(t){var e;t?(this._unbindScrollToEvents(t),(e=this.coreInstance)==null||e.removeScrollElements(t)):console.error("Please provide a DOM Element as $oldContainer")}addScrollElements(t){var e;t?((e=this.coreInstance)==null||e.addScrollElements(t),requestAnimationFrame(()=>{this._bindScrollToEvents(t)})):console.error("Please provide a DOM Element as $newContainer")}resize(){this._onResizeBind()}scrollTo(t,e){var i;(i=this.lenisInstance)==null||i.scrollTo(t,{offset:e==null?void 0:e.offset,lerp:e==null?void 0:e.lerp,duration:e==null?void 0:e.duration,immediate:e==null?void 0:e.immediate,lock:e==null?void 0:e.lock,force:e==null?void 0:e.force,easing:e==null?void 0:e.easing,onComplete:e==null?void 0:e.onComplete})}_raf(){this._onRenderBind(),this.rafInstance=requestAnimationFrame(()=>this._raf())}};var dt=class extends U{constructor(s){super(s)}init(){this.scroll=new ut({modularInstance:this})}lazyLoad(s){Ee(s.target,null,()=>{})}scrollTo(s){var n;let i=s,{target:t}=i,e=G(i,["target"]);e=Object.assign({duration:1},e),(n=this.scroll)==null||n.scrollTo(t,e)}destroy(){this.scroll.destroy()}};var Me=Be(Re(),1);var mt;y(void 0,null,function*(){if(W.IS_DEV){let s=yield Promise.resolve().then(()=>(Ce(),Te));mt=s==null?void 0:s.gridHelper}});function ke(){(0,Me.default)(),mt==null||mt()}var xe=(s,t,e=!1)=>{let i=null;return(...n)=>{clearTimeout(i);let r=()=>{i=null,e||s(...n)};e&&!i&&s(...n),i=setTimeout(r,t)}};var D=document.documentElement,Ki=document.body;var $e="fonts"in document;function Bs(s,t){for(let[e,i]of Object.entries(t))switch(e){case"family":{if(pt(s[e])!==i)return!1;break}case"weight":{if(s[e]!=i)return!1;break}default:{if(s[e]!==i)return!1;break}}return!0}function Gs(s,t){let e=pt(s.family);return pt(e)===t||t.endsWith(pt(e))&&(t.match(s.weight)||t.match(s.style)),!0}function Ys(s){let t=[];for(let e of document.fonts)Bs(e,s)&&t.push(e);return t}function Ks(s){let t=[];for(let e of document.fonts)Gs(e,s)&&t.push(e);return t}function Xs(s){Array.isArray(s)||(s=[s]);let t=new Set;return s.forEach(e=>{if(e)switch(typeof e){case"string":t.add(...Ks(e));return;case"object":t.add(...Ys(e));return}throw new TypeError("Expected font query to be font shorthand or font reference")}),[...t]}function Le(s,t=!1){return y(this,null,function*(){var e;if(((e=s.size)!=null?e:s.length)===0)throw new TypeError("Expected at least one font");return yield Zs([...s],t)})}function Pe(s){return y(this,null,function*(){return yield(s.status==="unloaded"?s.load():s.loaded).then(t=>t,t=>s)})}function Zs(s,t=!1){return y(this,null,function*(){t&&console.group("[loadFonts:API]",s.length,"/",document.fonts.size);let e=[];for(let i of s)i instanceof FontFace?(document.fonts.has(i)||document.fonts.add(i),e.push(Pe(i))):e.push(...Xs(i).map(n=>Pe(n)));return t&&console.groupEnd(),yield Promise.all(e)})}function pt(s){return s.replace(/['"]+/g,"")}var Ue=new Jt({modules:Vt});window.addEventListener("load",s=>{let t=document.getElementById("main-css");t?t.isLoaded?Fe():t.addEventListener("load",e=>{Fe()}):console.warn('The "main-css" stylesheet not found')});function Fe(){ke(),Ue.init(Ue),D.classList.add(k.LOADED),D.classList.add(k.READY),D.classList.remove(k.LOADING);let s=new CustomEvent(we.RESIZE_END);window.addEventListener("resize",()=>{D.style.setProperty("--vw",`${document.documentElement.clientWidth*.01}px`),xe(()=>{window.dispatchEvent(s)},200,!1)}),$e&&Le(ye.EAGER,W.IS_DEV).then(t=>{D.classList.add(k.FONTS_LOADED),W.IS_DEV&&(console.group("Eager fonts loaded!",t.length,"/",document.fonts.size),console.group("State of eager fonts:"),t.forEach(e=>console.log(e.family,e.style,e.weight,e.status)),console.groupEnd(),console.group("State of all fonts:"),document.fonts.forEach(e=>console.log(e.family,e.style,e.weight,e.status)),console.groupEnd())})}})(); /*! Bundled license information: svg4everybody/dist/svg4everybody.js: diff --git a/www/assets/scripts/app.js.map b/www/assets/scripts/app.js.map index cc7f090..7584c3f 100644 --- a/www/assets/scripts/app.js.map +++ b/www/assets/scripts/app.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../../node_modules/svg4everybody/dist/svg4everybody.js", "../../../assets/scripts/utils/grid-helper.js", "../../../node_modules/modujs/dist/main.esm.js", "../../../assets/scripts/modules.js", "../../../assets/scripts/modules/Dialog.js", "../../../node_modules/delegate-it/delegate.js", "../../../node_modules/path-to-regexp/src/index.ts", "../../../node_modules/swup/src/helpers/classify.ts", "../../../node_modules/swup/src/helpers/getCurrentUrl.ts", "../../../node_modules/swup/src/helpers/history.ts", "../../../node_modules/swup/src/helpers/delegateEvent.ts", "../../../node_modules/swup/src/helpers/Location.ts", "../../../node_modules/swup/src/helpers/matchPath.ts", "../../../node_modules/swup/src/modules/fetchPage.ts", "../../../node_modules/swup/src/modules/Cache.ts", "../../../node_modules/swup/src/utils/index.ts", "../../../node_modules/swup/src/modules/Classes.ts", "../../../node_modules/swup/src/modules/Visit.ts", "../../../node_modules/swup/src/modules/Hooks.ts", "../../../node_modules/swup/src/modules/getAnchorElement.ts", "../../../node_modules/swup/src/modules/awaitAnimations.ts", "../../../node_modules/swup/src/modules/navigate.ts", "../../../node_modules/swup/src/modules/animatePageOut.ts", "../../../node_modules/swup/src/modules/replaceContent.ts", "../../../node_modules/swup/src/modules/scrollToContent.ts", "../../../node_modules/swup/src/modules/animatePageIn.ts", "../../../node_modules/swup/src/modules/renderPage.ts", "../../../node_modules/swup/src/modules/plugins.ts", "../../../node_modules/swup/src/modules/resolveUrl.ts", "../../../node_modules/swup/src/Swup.ts", "../../../node_modules/@swup/plugin/src/versionSatisfies.ts", "../../../node_modules/@swup/plugin/src/index.ts", "../../../node_modules/@swup/plugin/src/pluginRequirements.ts", "../../../node_modules/@swup/fragment-plugin/src/inc/env.ts", "../../../node_modules/@swup/fragment-plugin/src/inc/Logger.ts", "../../../node_modules/@swup/fragment-plugin/src/inc/functions.ts", "../../../node_modules/@swup/fragment-plugin/src/inc/ParsedRule.ts", "../../../node_modules/@swup/fragment-plugin/src/inc/handlers.ts", "../../../node_modules/@swup/fragment-plugin/src/SwupFragmentPlugin.ts", "../../../assets/scripts/modules/Load.js", "../../../assets/scripts/config.js", "../../../assets/scripts/utils/image.js", "../../../node_modules/@studio-freight/lenis/src/maths.js", "../../../node_modules/@studio-freight/lenis/src/animate.js", "../../../node_modules/@studio-freight/lenis/src/dimensions.js", "../../../node_modules/@studio-freight/lenis/src/debounce.js", "../../../node_modules/@studio-freight/lenis/src/emitter.js", "../../../node_modules/@studio-freight/lenis/src/virtual-scroll.js", "../../../node_modules/@studio-freight/lenis/src/index.js", "../../../node_modules/locomotive-scroll/src/core/IO.ts", "../../../node_modules/locomotive-scroll/src/utils/maths.ts", "../../../node_modules/locomotive-scroll/src/core/ScrollElement.ts", "../../../node_modules/locomotive-scroll/src/core/Core.ts", "../../../node_modules/locomotive-scroll/src/core/RO.ts", "../../../node_modules/locomotive-scroll/src/index.ts", "../../../assets/scripts/modules/Scroll.js", "../../../assets/scripts/globals.js", "../../../assets/scripts/utils/tickers.js", "../../../assets/scripts/utils/dom.js", "../../../assets/scripts/utils/fonts.js", "../../../assets/scripts/app.js"], - "sourcesContent": ["!function(root, factory) {\n \"function\" == typeof define && define.amd ? // AMD. Register as an anonymous module unless amdModuleId is set\n define([], function() {\n return root.svg4everybody = factory();\n }) : \"object\" == typeof module && module.exports ? // Node. Does not work with strict CommonJS, but\n // only CommonJS-like environments that support module.exports,\n // like Node.\n module.exports = factory() : root.svg4everybody = factory();\n}(this, function() {\n /*! svg4everybody v2.1.9 | github.com/jonathantneal/svg4everybody */\n function embed(parent, svg, target) {\n // if the target exists\n if (target) {\n // create a document fragment to hold the contents of the target\n var fragment = document.createDocumentFragment(), viewBox = !svg.hasAttribute(\"viewBox\") && target.getAttribute(\"viewBox\");\n // conditionally set the viewBox on the svg\n viewBox && svg.setAttribute(\"viewBox\", viewBox);\n // copy the contents of the clone into the fragment\n for (// clone the target\n var clone = target.cloneNode(!0); clone.childNodes.length; ) {\n fragment.appendChild(clone.firstChild);\n }\n // append the fragment into the svg\n parent.appendChild(fragment);\n }\n }\n function loadreadystatechange(xhr) {\n // listen to changes in the request\n xhr.onreadystatechange = function() {\n // if the request is ready\n if (4 === xhr.readyState) {\n // get the cached html document\n var cachedDocument = xhr._cachedDocument;\n // ensure the cached html document based on the xhr response\n cachedDocument || (cachedDocument = xhr._cachedDocument = document.implementation.createHTMLDocument(\"\"), \n cachedDocument.body.innerHTML = xhr.responseText, xhr._cachedTarget = {}), // clear the xhr embeds list and embed each item\n xhr._embeds.splice(0).map(function(item) {\n // get the cached target\n var target = xhr._cachedTarget[item.id];\n // ensure the cached target\n target || (target = xhr._cachedTarget[item.id] = cachedDocument.getElementById(item.id)), \n // embed the target into the svg\n embed(item.parent, item.svg, target);\n });\n }\n }, // test the ready state change immediately\n xhr.onreadystatechange();\n }\n function svg4everybody(rawopts) {\n function oninterval() {\n // while the index exists in the live collection\n for (// get the cached index\n var index = 0; index < uses.length; ) {\n // get the current \n var use = uses[index], parent = use.parentNode, svg = getSVGAncestor(parent), src = use.getAttribute(\"xlink:href\") || use.getAttribute(\"href\");\n if (!src && opts.attributeName && (src = use.getAttribute(opts.attributeName)), \n svg && src) {\n if (polyfill) {\n if (!opts.validate || opts.validate(src, svg, use)) {\n // remove the element\n parent.removeChild(use);\n // parse the src and get the url and id\n var srcSplit = src.split(\"#\"), url = srcSplit.shift(), id = srcSplit.join(\"#\");\n // if the link is external\n if (url.length) {\n // get the cached xhr request\n var xhr = requests[url];\n // ensure the xhr request exists\n xhr || (xhr = requests[url] = new XMLHttpRequest(), xhr.open(\"GET\", url), xhr.send(), \n xhr._embeds = []), // add the svg and id as an item to the xhr embeds list\n xhr._embeds.push({\n parent: parent,\n svg: svg,\n id: id\n }), // prepare the xhr ready state change event\n loadreadystatechange(xhr);\n } else {\n // embed the local id into the svg\n embed(parent, svg, document.getElementById(id));\n }\n } else {\n // increase the index when the previous value was not \"valid\"\n ++index, ++numberOfSvgUseElementsToBypass;\n }\n }\n } else {\n // increase the index when the previous value was not \"valid\"\n ++index;\n }\n }\n // continue the interval\n (!uses.length || uses.length - numberOfSvgUseElementsToBypass > 0) && requestAnimationFrame(oninterval, 67);\n }\n var polyfill, opts = Object(rawopts), newerIEUA = /\\bTrident\\/[567]\\b|\\bMSIE (?:9|10)\\.0\\b/, webkitUA = /\\bAppleWebKit\\/(\\d+)\\b/, olderEdgeUA = /\\bEdge\\/12\\.(\\d+)\\b/, edgeUA = /\\bEdge\\/.(\\d+)\\b/, inIframe = window.top !== window.self;\n polyfill = \"polyfill\" in opts ? opts.polyfill : newerIEUA.test(navigator.userAgent) || (navigator.userAgent.match(olderEdgeUA) || [])[1] < 10547 || (navigator.userAgent.match(webkitUA) || [])[1] < 537 || edgeUA.test(navigator.userAgent) && inIframe;\n // create xhr requests object\n var requests = {}, requestAnimationFrame = window.requestAnimationFrame || setTimeout, uses = document.getElementsByTagName(\"use\"), numberOfSvgUseElementsToBypass = 0;\n // conditionally start the interval if the polyfill is active\n polyfill && oninterval();\n }\n function getSVGAncestor(node) {\n for (var svg = node; \"svg\" !== svg.nodeName.toLowerCase() && (svg = svg.parentNode); ) {}\n return svg;\n }\n return svg4everybody;\n});", "/**\n * Grid Helper\n *\n * Provides a grid based on the design guidelines and is helpful for web integration.\n *\n * - `Control + g` to toggle the grid\n *\n */\n\n/**\n * @typedef {Object} GridHelperReference\n *\n * @property {string} [gutterCssVar=GRID_HELPER_GUTTER_CSS_VAR] - CSS variable used to define grid gutters.\n * @property {string} [marginCssVar=GRID_HELPER_MARGIN_CSS_VAR] - CSS variable used to define grid margins.\n * @property {string} [rgbaColor=GRID_HELPER_RGBA_COLOR] - RGBA color for the grid appearence.\n */\n\nconst GRID_HELPER_GUTTER_CSS_VAR = '--grid-gutter';\nconst GRID_HELPER_MARGIN_CSS_VAR = '--grid-margin';\nconst GRID_HELPER_RGBA_COLOR = 'rgba(255, 0, 0, .1)';\n\n/**\n * Create a grid helper\n *\n * @param {GridHelperReference}\n *\n */\nfunction gridHelper({\n gutterCssVar = GRID_HELPER_GUTTER_CSS_VAR,\n marginCssVar = GRID_HELPER_MARGIN_CSS_VAR,\n rgbaColor = GRID_HELPER_RGBA_COLOR,\n} = {}) {\n // Set grid container\n const $gridContainer = document.createElement('div');\n document.body.append($gridContainer);\n\n // Set grid appearence\n setGridHelperColumns($gridContainer, rgbaColor);\n setGridHelperStyles($gridContainer, gutterCssVar, marginCssVar);\n\n // Set grid interactivity\n setGridEvents($gridContainer, rgbaColor);\n}\n\n/**\n * Set grid container styles\n *\n * @param {HTMLElement} $container - DOM Element that contains a list of generated columns\n * @param {string} gutterCssVar - CSS variable used to define grid gutters.\n * @param {string} marginCssVar - CSS variable used to define grid margins.\n *\n */\nfunction setGridHelperStyles($container, gutterCssVar, marginCssVar) {\n const elStyles = $container.style;\n elStyles.zIndex = '10000';\n elStyles.position = 'fixed';\n elStyles.top = '0';\n elStyles.left = '0';\n elStyles.display = 'flex';\n elStyles.width = '100%';\n elStyles.height = '100%';\n elStyles.columnGap = `var(${gutterCssVar}, 0)`;\n elStyles.paddingLeft = `var(${marginCssVar}, 0)`;\n elStyles.paddingRight = `var(${marginCssVar}, 0)`;\n elStyles.pointerEvents = 'none';\n elStyles.visibility = 'hidden';\n}\n\n/**\n * Set grid columns\n *\n * @param {HTMLElement} $container - DOM Element that will contain a list of generated columns\n * @param {string} rgbaColor - RGBA color to stylize the generated columns\n *\n */\nfunction setGridHelperColumns($container, rgbaColor) {\n // Clear columns\n $container.innerHTML = '';\n\n // Loop through columns\n const columns = Number(\n window.getComputedStyle($container).getPropertyValue('--grid-columns')\n );\n\n let $col;\n for (var i = 0; i < columns; i++) {\n $col = document.createElement('div');\n $col.style.flex = '1 1 0';\n $col.style.backgroundColor = rgbaColor;\n $container.appendChild($col);\n }\n}\n\n/**\n * Set grid events\n *\n * Resize to rebuild columns\n * Keydown/Keyup to toggle the grid display\n *\n * @param {HTMLElement} $container - DOM Element that contains a list of generated columns\n * @param {string} rgbaColor - RGBA color to stylize the generated columns\n *\n */\nfunction setGridEvents($container, rgbaColor) {\n // Handle resize\n window.addEventListener(\n 'resize',\n setGridHelperColumns($container, rgbaColor)\n );\n\n // Toggle grid\n let ctrlDown = false;\n let isActive = false;\n\n document.addEventListener('keydown', (e) => {\n if (e.key == 'Control') {\n ctrlDown = true;\n } else {\n if (ctrlDown && e.key == 'g') {\n if (isActive) {\n $container.style.visibility = 'hidden';\n } else {\n $container.style.visibility = 'visible';\n }\n\n isActive = !isActive;\n }\n }\n });\n\n document.addEventListener('keyup', (e) => {\n if (e.key == 'Control') {\n ctrlDown = false;\n }\n });\n}\n\nexport { gridHelper };\n", "function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar _default = /*#__PURE__*/function () {\n function _default(options) {\n _classCallCheck(this, _default);\n\n this.mAttr = 'data-' + options.dataName;\n this.mCaptureEvents = ['mouseenter', 'mouseleave'];\n this.el = options.el;\n }\n\n _createClass(_default, [{\n key: \"mInit\",\n value: function mInit(modules) {\n var _this = this;\n\n this.modules = modules;\n this.mCheckEventTarget = this.mCheckEventTarget.bind(this);\n\n if (this.events) {\n Object.keys(this.events).forEach(function (event) {\n return _this.mAddEvent(event);\n });\n }\n }\n }, {\n key: \"mUpdate\",\n value: function mUpdate(modules) {\n this.modules = modules;\n }\n }, {\n key: \"mDestroy\",\n value: function mDestroy() {\n var _this2 = this;\n\n if (this.events) {\n Object.keys(this.events).forEach(function (event) {\n return _this2.mRemoveEvent(event);\n });\n }\n }\n }, {\n key: \"mAddEvent\",\n value: function mAddEvent(event) {\n var capture = this.mCaptureEvents.includes(event) ? true : false;\n this.el.addEventListener(event, this.mCheckEventTarget, capture);\n }\n }, {\n key: \"mRemoveEvent\",\n value: function mRemoveEvent(event) {\n var capture = this.mCaptureEvents.includes(event) ? true : false;\n this.el.removeEventListener(event, this.mCheckEventTarget, capture);\n }\n }, {\n key: \"mCheckEventTarget\",\n value: function mCheckEventTarget(e) {\n var event = this.events[e.type];\n\n if (typeof event === \"string\") {\n this[event](e);\n } else {\n var data = '[' + this.mAttr + ']';\n var target = e.target;\n\n if (this.mCaptureEvents.includes(e.type)) {\n if (target.matches(data)) {\n this.mCallEventMethod(e, event, target);\n }\n } else {\n while (target && target !== document) {\n if (target.matches(data)) {\n if (this.mCallEventMethod(e, event, target) != 'undefined') {\n break;\n }\n }\n\n target = target.parentNode;\n }\n }\n }\n }\n }, {\n key: \"mCallEventMethod\",\n value: function mCallEventMethod(e, event, target) {\n var name = target.getAttribute(this.mAttr);\n\n if (event.hasOwnProperty(name)) {\n var method = event[name];\n\n if (!e.hasOwnProperty('currentTarget')) {\n Object.defineProperty(e, 'currentTarget', {\n value: target\n });\n }\n\n if (!e.hasOwnProperty('curTarget')) {\n Object.defineProperty(e, 'curTarget', {\n value: target\n }); // For IE 11\n }\n\n this[method](e);\n }\n }\n }, {\n key: \"$\",\n value: function $(query, context) {\n var classIndex = query.indexOf('.');\n var idIndex = query.indexOf('#');\n var attrIndex = query.indexOf('[');\n var indexes = [classIndex, idIndex, attrIndex].filter(function (index) {\n return index != -1;\n });\n var index = false;\n var name = query;\n var more = '';\n var parent = this.el;\n\n if (indexes.length) {\n index = Math.min.apply(Math, _toConsumableArray(indexes));\n name = query.slice(0, index);\n more = query.slice(index);\n }\n\n if (_typeof(context) == 'object') {\n parent = context;\n }\n\n return parent.querySelectorAll('[' + this.mAttr + '=' + name + ']' + more);\n }\n }, {\n key: \"parent\",\n value: function parent(query, context) {\n var data = '[' + this.mAttr + '=' + query + ']';\n var parent = context.parentNode;\n\n while (parent && parent !== document) {\n if (parent.matches(data)) {\n return parent;\n }\n\n parent = parent.parentNode;\n }\n }\n }, {\n key: \"getData\",\n value: function getData(name, context) {\n var target = context || this.el;\n return target.getAttribute(this.mAttr + '-' + name);\n }\n }, {\n key: \"setData\",\n value: function setData(name, value, context) {\n var target = context || this.el;\n return target.setAttribute(this.mAttr + '-' + name, value);\n }\n }, {\n key: \"call\",\n value: function call(func, args, mod, id) {\n var _this3 = this;\n\n if (args && !mod) {\n mod = args;\n args = false;\n }\n\n if (this.modules[mod]) {\n if (id) {\n if (this.modules[mod][id]) {\n this.modules[mod][id][func](args);\n }\n } else {\n Object.keys(this.modules[mod]).forEach(function (id) {\n _this3.modules[mod][id][func](args);\n });\n }\n }\n }\n }, {\n key: \"on\",\n value: function on(e, mod, func, id) {\n var _this4 = this;\n\n if (this.modules[mod]) {\n if (id) {\n this.modules[mod][id].el.addEventListener(e, function (o) {\n return func(o);\n });\n } else {\n Object.keys(this.modules[mod]).forEach(function (i) {\n _this4.modules[mod][i].el.addEventListener(e, function (o) {\n return func(o);\n });\n });\n }\n }\n }\n }, {\n key: \"init\",\n value: function init() {}\n }, {\n key: \"destroy\",\n value: function destroy() {}\n }]);\n\n return _default;\n}();\n\nvar _default$1 = /*#__PURE__*/function () {\n function _default(options) {\n _classCallCheck(this, _default);\n\n this.app;\n this.modules = options.modules;\n this.currentModules = {};\n this.activeModules = {};\n this.newModules = {};\n this.moduleId = 0;\n }\n\n _createClass(_default, [{\n key: \"init\",\n value: function init(app, scope) {\n var _this = this;\n\n var container = scope || document;\n var elements = container.querySelectorAll('*');\n\n if (app && !this.app) {\n this.app = app;\n }\n\n this.activeModules['app'] = {\n 'app': this.app\n };\n elements.forEach(function (el) {\n Array.from(el.attributes).forEach(function (i) {\n if (i.name.startsWith('data-module')) {\n var moduleExists = false;\n var dataName = i.name.split('-').splice(2);\n\n var moduleName = _this.toCamel(dataName);\n\n if (_this.modules[moduleName]) {\n moduleExists = true;\n } else if (_this.modules[_this.toUpper(moduleName)]) {\n moduleName = _this.toUpper(moduleName);\n moduleExists = true;\n }\n\n if (moduleExists) {\n var options = {\n el: el,\n name: moduleName,\n dataName: dataName.join('-')\n };\n var module = new _this.modules[moduleName](options);\n var id = i.value;\n\n if (!id) {\n _this.moduleId++;\n id = 'm' + _this.moduleId;\n el.setAttribute(i.name, id);\n }\n\n _this.addActiveModule(moduleName, id, module);\n\n var moduleId = moduleName + '-' + id;\n\n if (scope) {\n _this.newModules[moduleId] = module;\n } else {\n _this.currentModules[moduleId] = module;\n }\n }\n }\n });\n });\n Object.entries(this.currentModules).forEach(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n id = _ref2[0],\n module = _ref2[1];\n\n if (scope) {\n var split = id.split('-');\n var moduleName = split.shift();\n var moduleId = split.pop();\n\n _this.addActiveModule(moduleName, moduleId, module);\n } else {\n _this.initModule(module);\n }\n });\n }\n }, {\n key: \"initModule\",\n value: function initModule(module) {\n module.mInit(this.activeModules);\n module.init();\n }\n }, {\n key: \"addActiveModule\",\n value: function addActiveModule(name, id, module) {\n if (this.activeModules[name]) {\n Object.assign(this.activeModules[name], _defineProperty({}, id, module));\n } else {\n this.activeModules[name] = _defineProperty({}, id, module);\n }\n }\n }, {\n key: \"update\",\n value: function update(scope) {\n var _this2 = this;\n\n this.init(this.app, scope);\n Object.entries(this.currentModules).forEach(function (_ref3) {\n var _ref4 = _slicedToArray(_ref3, 2),\n id = _ref4[0],\n module = _ref4[1];\n\n module.mUpdate(_this2.activeModules);\n });\n Object.entries(this.newModules).forEach(function (_ref5) {\n var _ref6 = _slicedToArray(_ref5, 2),\n id = _ref6[0],\n module = _ref6[1];\n\n _this2.initModule(module);\n });\n Object.assign(this.currentModules, this.newModules);\n }\n }, {\n key: \"destroy\",\n value: function destroy(scope) {\n if (scope) {\n this.destroyScope(scope);\n } else {\n this.destroyModules();\n }\n }\n }, {\n key: \"destroyScope\",\n value: function destroyScope(scope) {\n var _this3 = this;\n\n var elements = scope.querySelectorAll('*');\n elements.forEach(function (el) {\n Array.from(el.attributes).forEach(function (i) {\n if (i.name.startsWith('data-module')) {\n var id = i.value;\n var dataName = i.name.split('-').splice(2);\n var moduleName = _this3.toCamel(dataName) + '-' + id;\n var moduleExists = false;\n\n if (_this3.currentModules[moduleName]) {\n moduleExists = true;\n } else if (_this3.currentModules[_this3.toUpper(moduleName)]) {\n moduleName = _this3.toUpper(moduleName);\n moduleExists = true;\n }\n\n if (moduleExists) {\n _this3.destroyModule(_this3.currentModules[moduleName]);\n\n delete _this3.currentModules[moduleName];\n }\n }\n });\n });\n this.activeModules = {};\n this.newModules = {};\n }\n }, {\n key: \"destroyModules\",\n value: function destroyModules() {\n var _this4 = this;\n\n Object.entries(this.currentModules).forEach(function (_ref7) {\n var _ref8 = _slicedToArray(_ref7, 2),\n id = _ref8[0],\n module = _ref8[1];\n\n _this4.destroyModule(module);\n });\n this.currentModules = [];\n }\n }, {\n key: \"destroyModule\",\n value: function destroyModule(module) {\n module.mDestroy();\n module.destroy();\n }\n }, {\n key: \"toCamel\",\n value: function toCamel(arr) {\n var _this5 = this;\n\n return arr.reduce(function (a, b) {\n return a + _this5.toUpper(b);\n });\n }\n }, {\n key: \"toUpper\",\n value: function toUpper(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n }\n }]);\n\n return _default;\n}();\n\nexport default _default$1;\nexport { _default as module };\n", "// export {default as Example} from './modules/Example';\nexport {default as Dialog} from './modules/Dialog';\nexport {default as Load} from './modules/Load';\nexport {default as Scroll} from './modules/Scroll';\n", "import { module } from 'modujs';\n\nexport default class extends module {\n constructor(m) {\n super(m);\n\n this.$closeBtn = this.$('close')[0]\n }\n\n init() {\n // Prevent ESC to close dialog\n this.onKeyDown = this.onKeyDown.bind(this)\n }\n\n onKeyDown(e) {\n if(e.key === 'Escape') {\n console.log('ESCAPE');\n e.preventDefault()\n this.$closeBtn.click();\n }\n }\n\n populate(container) {\n this.el.appendChild(container)\n }\n\n show() {\n this.el.showModal();\n window.addEventListener('keydown', this.onKeyDown);\n }\n\n close() {\n window.removeEventListener('keydown', this.onKeyDown);\n this.el.close();\n }\n}\n", "/** Keeps track of raw listeners added to the base elements to avoid duplication */\nconst ledger = new WeakMap();\nfunction editLedger(wanted, baseElement, callback, setup) {\n if (!wanted && !ledger.has(baseElement)) {\n return false;\n }\n const elementMap = ledger.get(baseElement)\n ?? new WeakMap();\n ledger.set(baseElement, elementMap);\n const setups = elementMap.get(callback) ?? new Set();\n elementMap.set(callback, setups);\n const existed = setups.has(setup);\n if (wanted) {\n setups.add(setup);\n }\n else {\n setups.delete(setup);\n }\n return existed && wanted;\n}\nfunction safeClosest(event, selector) {\n let target = event.target;\n if (target instanceof Text) {\n target = target.parentElement;\n }\n if (target instanceof Element && event.currentTarget instanceof Element) {\n // `.closest()` may match ancestors of `currentTarget` but we only need its children\n const closest = target.closest(selector);\n if (closest && event.currentTarget.contains(closest)) {\n return closest;\n }\n }\n}\n// This type isn't exported as a declaration, so it needs to be duplicated above\nfunction delegate(selector, type, callback, options = {}) {\n const { signal, base = document } = options;\n if (signal?.aborted) {\n return;\n }\n // Don't pass `once` to `addEventListener` because it needs to be handled in `delegate-it`\n const { once, ...nativeListenerOptions } = options;\n // `document` should never be the base, it's just an easy way to define \"global event listeners\"\n const baseElement = base instanceof Document ? base.documentElement : base;\n // Handle the regular Element usage\n const capture = Boolean(typeof options === 'object' ? options.capture : options);\n const listenerFn = (event) => {\n const delegateTarget = safeClosest(event, selector);\n if (delegateTarget) {\n const delegateEvent = Object.assign(event, { delegateTarget });\n callback.call(baseElement, delegateEvent);\n if (once) {\n baseElement.removeEventListener(type, listenerFn, nativeListenerOptions);\n editLedger(false, baseElement, callback, setup);\n }\n }\n };\n const setup = JSON.stringify({ selector, type, capture });\n const isAlreadyListening = editLedger(true, baseElement, callback, setup);\n if (!isAlreadyListening) {\n baseElement.addEventListener(type, listenerFn, nativeListenerOptions);\n }\n signal?.addEventListener('abort', () => {\n editLedger(false, baseElement, callback, setup);\n });\n}\nexport default delegate;\n", "/**\n * Tokenizer results.\n */\ninterface LexToken {\n type:\n | \"OPEN\"\n | \"CLOSE\"\n | \"PATTERN\"\n | \"NAME\"\n | \"CHAR\"\n | \"ESCAPED_CHAR\"\n | \"MODIFIER\"\n | \"END\";\n index: number;\n value: string;\n}\n\n/**\n * Tokenize input string.\n */\nfunction lexer(str: string): LexToken[] {\n const tokens: LexToken[] = [];\n let i = 0;\n\n while (i < str.length) {\n const char = str[i];\n\n if (char === \"*\" || char === \"+\" || char === \"?\") {\n tokens.push({ type: \"MODIFIER\", index: i, value: str[i++] });\n continue;\n }\n\n if (char === \"\\\\\") {\n tokens.push({ type: \"ESCAPED_CHAR\", index: i++, value: str[i++] });\n continue;\n }\n\n if (char === \"{\") {\n tokens.push({ type: \"OPEN\", index: i, value: str[i++] });\n continue;\n }\n\n if (char === \"}\") {\n tokens.push({ type: \"CLOSE\", index: i, value: str[i++] });\n continue;\n }\n\n if (char === \":\") {\n let name = \"\";\n let j = i + 1;\n\n while (j < str.length) {\n const code = str.charCodeAt(j);\n\n if (\n // `0-9`\n (code >= 48 && code <= 57) ||\n // `A-Z`\n (code >= 65 && code <= 90) ||\n // `a-z`\n (code >= 97 && code <= 122) ||\n // `_`\n code === 95\n ) {\n name += str[j++];\n continue;\n }\n\n break;\n }\n\n if (!name) throw new TypeError(`Missing parameter name at ${i}`);\n\n tokens.push({ type: \"NAME\", index: i, value: name });\n i = j;\n continue;\n }\n\n if (char === \"(\") {\n let count = 1;\n let pattern = \"\";\n let j = i + 1;\n\n if (str[j] === \"?\") {\n throw new TypeError(`Pattern cannot start with \"?\" at ${j}`);\n }\n\n while (j < str.length) {\n if (str[j] === \"\\\\\") {\n pattern += str[j++] + str[j++];\n continue;\n }\n\n if (str[j] === \")\") {\n count--;\n if (count === 0) {\n j++;\n break;\n }\n } else if (str[j] === \"(\") {\n count++;\n if (str[j + 1] !== \"?\") {\n throw new TypeError(`Capturing groups are not allowed at ${j}`);\n }\n }\n\n pattern += str[j++];\n }\n\n if (count) throw new TypeError(`Unbalanced pattern at ${i}`);\n if (!pattern) throw new TypeError(`Missing pattern at ${i}`);\n\n tokens.push({ type: \"PATTERN\", index: i, value: pattern });\n i = j;\n continue;\n }\n\n tokens.push({ type: \"CHAR\", index: i, value: str[i++] });\n }\n\n tokens.push({ type: \"END\", index: i, value: \"\" });\n\n return tokens;\n}\n\nexport interface ParseOptions {\n /**\n * Set the default delimiter for repeat parameters. (default: `'/'`)\n */\n delimiter?: string;\n /**\n * List of characters to automatically consider prefixes when parsing.\n */\n prefixes?: string;\n}\n\n/**\n * Parse a string for the raw tokens.\n */\nexport function parse(str: string, options: ParseOptions = {}): Token[] {\n const tokens = lexer(str);\n const { prefixes = \"./\" } = options;\n const defaultPattern = `[^${escapeString(options.delimiter || \"/#?\")}]+?`;\n const result: Token[] = [];\n let key = 0;\n let i = 0;\n let path = \"\";\n\n const tryConsume = (type: LexToken[\"type\"]): string | undefined => {\n if (i < tokens.length && tokens[i].type === type) return tokens[i++].value;\n };\n\n const mustConsume = (type: LexToken[\"type\"]): string => {\n const value = tryConsume(type);\n if (value !== undefined) return value;\n const { type: nextType, index } = tokens[i];\n throw new TypeError(`Unexpected ${nextType} at ${index}, expected ${type}`);\n };\n\n const consumeText = (): string => {\n let result = \"\";\n let value: string | undefined;\n while ((value = tryConsume(\"CHAR\") || tryConsume(\"ESCAPED_CHAR\"))) {\n result += value;\n }\n return result;\n };\n\n while (i < tokens.length) {\n const char = tryConsume(\"CHAR\");\n const name = tryConsume(\"NAME\");\n const pattern = tryConsume(\"PATTERN\");\n\n if (name || pattern) {\n let prefix = char || \"\";\n\n if (prefixes.indexOf(prefix) === -1) {\n path += prefix;\n prefix = \"\";\n }\n\n if (path) {\n result.push(path);\n path = \"\";\n }\n\n result.push({\n name: name || key++,\n prefix,\n suffix: \"\",\n pattern: pattern || defaultPattern,\n modifier: tryConsume(\"MODIFIER\") || \"\",\n });\n continue;\n }\n\n const value = char || tryConsume(\"ESCAPED_CHAR\");\n if (value) {\n path += value;\n continue;\n }\n\n if (path) {\n result.push(path);\n path = \"\";\n }\n\n const open = tryConsume(\"OPEN\");\n if (open) {\n const prefix = consumeText();\n const name = tryConsume(\"NAME\") || \"\";\n const pattern = tryConsume(\"PATTERN\") || \"\";\n const suffix = consumeText();\n\n mustConsume(\"CLOSE\");\n\n result.push({\n name: name || (pattern ? key++ : \"\"),\n pattern: name && !pattern ? defaultPattern : pattern,\n prefix,\n suffix,\n modifier: tryConsume(\"MODIFIER\") || \"\",\n });\n continue;\n }\n\n mustConsume(\"END\");\n }\n\n return result;\n}\n\nexport interface TokensToFunctionOptions {\n /**\n * When `true` the regexp will be case sensitive. (default: `false`)\n */\n sensitive?: boolean;\n /**\n * Function for encoding input strings for output.\n */\n encode?: (value: string, token: Key) => string;\n /**\n * When `false` the function can produce an invalid (unmatched) path. (default: `true`)\n */\n validate?: boolean;\n}\n\n/**\n * Compile a string to a template function for the path.\n */\nexport function compile

(\n str: string,\n options?: ParseOptions & TokensToFunctionOptions\n) {\n return tokensToFunction

(parse(str, options), options);\n}\n\nexport type PathFunction

= (data?: P) => string;\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nexport function tokensToFunction

(\n tokens: Token[],\n options: TokensToFunctionOptions = {}\n): PathFunction

{\n const reFlags = flags(options);\n const { encode = (x: string) => x, validate = true } = options;\n\n // Compile all the tokens into regexps.\n const matches = tokens.map((token) => {\n if (typeof token === \"object\") {\n return new RegExp(`^(?:${token.pattern})$`, reFlags);\n }\n });\n\n return (data: Record | null | undefined) => {\n let path = \"\";\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n\n if (typeof token === \"string\") {\n path += token;\n continue;\n }\n\n const value = data ? data[token.name] : undefined;\n const optional = token.modifier === \"?\" || token.modifier === \"*\";\n const repeat = token.modifier === \"*\" || token.modifier === \"+\";\n\n if (Array.isArray(value)) {\n if (!repeat) {\n throw new TypeError(\n `Expected \"${token.name}\" to not repeat, but got an array`\n );\n }\n\n if (value.length === 0) {\n if (optional) continue;\n\n throw new TypeError(`Expected \"${token.name}\" to not be empty`);\n }\n\n for (let j = 0; j < value.length; j++) {\n const segment = encode(value[j], token);\n\n if (validate && !(matches[i] as RegExp).test(segment)) {\n throw new TypeError(\n `Expected all \"${token.name}\" to match \"${token.pattern}\", but got \"${segment}\"`\n );\n }\n\n path += token.prefix + segment + token.suffix;\n }\n\n continue;\n }\n\n if (typeof value === \"string\" || typeof value === \"number\") {\n const segment = encode(String(value), token);\n\n if (validate && !(matches[i] as RegExp).test(segment)) {\n throw new TypeError(\n `Expected \"${token.name}\" to match \"${token.pattern}\", but got \"${segment}\"`\n );\n }\n\n path += token.prefix + segment + token.suffix;\n continue;\n }\n\n if (optional) continue;\n\n const typeOfMessage = repeat ? \"an array\" : \"a string\";\n throw new TypeError(`Expected \"${token.name}\" to be ${typeOfMessage}`);\n }\n\n return path;\n };\n}\n\nexport interface RegexpToFunctionOptions {\n /**\n * Function for decoding strings for params.\n */\n decode?: (value: string, token: Key) => string;\n}\n\n/**\n * A match result contains data about the path match.\n */\nexport interface MatchResult

{\n path: string;\n index: number;\n params: P;\n}\n\n/**\n * A match is either `false` (no match) or a match result.\n */\nexport type Match

= false | MatchResult

;\n\n/**\n * The match function takes a string and returns whether it matched the path.\n */\nexport type MatchFunction

= (\n path: string\n) => Match

;\n\n/**\n * Create path match function from `path-to-regexp` spec.\n */\nexport function match

(\n str: Path,\n options?: ParseOptions & TokensToRegexpOptions & RegexpToFunctionOptions\n) {\n const keys: Key[] = [];\n const re = pathToRegexp(str, keys, options);\n return regexpToFunction

(re, keys, options);\n}\n\n/**\n * Create a path match function from `path-to-regexp` output.\n */\nexport function regexpToFunction

(\n re: RegExp,\n keys: Key[],\n options: RegexpToFunctionOptions = {}\n): MatchFunction

{\n const { decode = (x: string) => x } = options;\n\n return function (pathname: string) {\n const m = re.exec(pathname);\n if (!m) return false;\n\n const { 0: path, index } = m;\n const params = Object.create(null);\n\n for (let i = 1; i < m.length; i++) {\n if (m[i] === undefined) continue;\n\n const key = keys[i - 1];\n\n if (key.modifier === \"*\" || key.modifier === \"+\") {\n params[key.name] = m[i].split(key.prefix + key.suffix).map((value) => {\n return decode(value, key);\n });\n } else {\n params[key.name] = decode(m[i], key);\n }\n }\n\n return { path, index, params };\n };\n}\n\n/**\n * Escape a regular expression string.\n */\nfunction escapeString(str: string) {\n return str.replace(/([.+*?=^!:${}()[\\]|/\\\\])/g, \"\\\\$1\");\n}\n\n/**\n * Get the flags for a regexp from the options.\n */\nfunction flags(options?: { sensitive?: boolean }) {\n return options && options.sensitive ? \"\" : \"i\";\n}\n\n/**\n * Metadata about a key.\n */\nexport interface Key {\n name: string | number;\n prefix: string;\n suffix: string;\n pattern: string;\n modifier: string;\n}\n\n/**\n * A token is a string (nothing special) or key metadata (capture group).\n */\nexport type Token = string | Key;\n\n/**\n * Pull out keys from a regexp.\n */\nfunction regexpToRegexp(path: RegExp, keys?: Key[]): RegExp {\n if (!keys) return path;\n\n const groupsRegex = /\\((?:\\?<(.*?)>)?(?!\\?)/g;\n\n let index = 0;\n let execResult = groupsRegex.exec(path.source);\n while (execResult) {\n keys.push({\n // Use parenthesized substring match if available, index otherwise\n name: execResult[1] || index++,\n prefix: \"\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"\",\n });\n execResult = groupsRegex.exec(path.source);\n }\n\n return path;\n}\n\n/**\n * Transform an array into a regexp.\n */\nfunction arrayToRegexp(\n paths: Array,\n keys?: Key[],\n options?: TokensToRegexpOptions & ParseOptions\n): RegExp {\n const parts = paths.map((path) => pathToRegexp(path, keys, options).source);\n return new RegExp(`(?:${parts.join(\"|\")})`, flags(options));\n}\n\n/**\n * Create a path regexp from string input.\n */\nfunction stringToRegexp(\n path: string,\n keys?: Key[],\n options?: TokensToRegexpOptions & ParseOptions\n) {\n return tokensToRegexp(parse(path, options), keys, options);\n}\n\nexport interface TokensToRegexpOptions {\n /**\n * When `true` the regexp will be case sensitive. (default: `false`)\n */\n sensitive?: boolean;\n /**\n * When `true` the regexp won't allow an optional trailing delimiter to match. (default: `false`)\n */\n strict?: boolean;\n /**\n * When `true` the regexp will match to the end of the string. (default: `true`)\n */\n end?: boolean;\n /**\n * When `true` the regexp will match from the beginning of the string. (default: `true`)\n */\n start?: boolean;\n /**\n * Sets the final character for non-ending optimistic matches. (default: `/`)\n */\n delimiter?: string;\n /**\n * List of characters that can also be \"end\" characters.\n */\n endsWith?: string;\n /**\n * Encode path tokens for use in the `RegExp`.\n */\n encode?: (value: string) => string;\n}\n\n/**\n * Expose a function for taking tokens and returning a RegExp.\n */\nexport function tokensToRegexp(\n tokens: Token[],\n keys?: Key[],\n options: TokensToRegexpOptions = {}\n) {\n const {\n strict = false,\n start = true,\n end = true,\n encode = (x: string) => x,\n delimiter = \"/#?\",\n endsWith = \"\",\n } = options;\n const endsWithRe = `[${escapeString(endsWith)}]|$`;\n const delimiterRe = `[${escapeString(delimiter)}]`;\n let route = start ? \"^\" : \"\";\n\n // Iterate over the tokens and create our regexp string.\n for (const token of tokens) {\n if (typeof token === \"string\") {\n route += escapeString(encode(token));\n } else {\n const prefix = escapeString(encode(token.prefix));\n const suffix = escapeString(encode(token.suffix));\n\n if (token.pattern) {\n if (keys) keys.push(token);\n\n if (prefix || suffix) {\n if (token.modifier === \"+\" || token.modifier === \"*\") {\n const mod = token.modifier === \"*\" ? \"?\" : \"\";\n route += `(?:${prefix}((?:${token.pattern})(?:${suffix}${prefix}(?:${token.pattern}))*)${suffix})${mod}`;\n } else {\n route += `(?:${prefix}(${token.pattern})${suffix})${token.modifier}`;\n }\n } else {\n if (token.modifier === \"+\" || token.modifier === \"*\") {\n route += `((?:${token.pattern})${token.modifier})`;\n } else {\n route += `(${token.pattern})${token.modifier}`;\n }\n }\n } else {\n route += `(?:${prefix}${suffix})${token.modifier}`;\n }\n }\n }\n\n if (end) {\n if (!strict) route += `${delimiterRe}?`;\n\n route += !options.endsWith ? \"$\" : `(?=${endsWithRe})`;\n } else {\n const endToken = tokens[tokens.length - 1];\n const isEndDelimited =\n typeof endToken === \"string\"\n ? delimiterRe.indexOf(endToken[endToken.length - 1]) > -1\n : endToken === undefined;\n\n if (!strict) {\n route += `(?:${delimiterRe}(?=${endsWithRe}))?`;\n }\n\n if (!isEndDelimited) {\n route += `(?=${delimiterRe}|${endsWithRe})`;\n }\n }\n\n return new RegExp(route, flags(options));\n}\n\n/**\n * Supported `path-to-regexp` input types.\n */\nexport type Path = string | RegExp | Array;\n\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n */\nexport function pathToRegexp(\n path: Path,\n keys?: Key[],\n options?: TokensToRegexpOptions & ParseOptions\n) {\n if (path instanceof RegExp) return regexpToRegexp(path, keys);\n if (Array.isArray(path)) return arrayToRegexp(path, keys, options);\n return stringToRegexp(path, keys, options);\n}\n", "/** Turn a string into a slug by lowercasing and replacing whitespace. */\nexport const classify = (text: string, fallback?: string): string => {\n\tconst output = String(text)\n\t\t.toLowerCase()\n\t\t// .normalize('NFD') // split an accented letter in the base letter and the acent\n\t\t// .replace(/[\\u0300-\\u036f]/g, '') // remove all previously split accents\n\t\t.replace(/[\\s/_.]+/g, '-') // replace spaces and _./ with '-'\n\t\t.replace(/[^\\w-]+/g, '') // remove all non-word chars\n\t\t.replace(/--+/g, '-') // replace repeating '-' with single '-'\n\t\t.replace(/^-+|-+$/g, ''); // trim '-' from edges\n\treturn output || fallback || '';\n};\n", "/** Get the current page URL: path name + query params. Optionally including hash. */\nexport const getCurrentUrl = ({ hash }: { hash?: boolean } = {}): string => {\n\treturn window.location.pathname + window.location.search + (hash ? window.location.hash : '');\n};\n", "import { getCurrentUrl } from './getCurrentUrl.js';\n\nexport interface HistoryState {\n\turl: string;\n\tsource: 'swup';\n\trandom: number;\n\tindex?: number;\n\t[key: string]: unknown;\n}\n\ntype HistoryData = Record;\n\n/** Create a new history record with a custom swup identifier. */\nexport const createHistoryRecord = (url: string, data: HistoryData = {}): void => {\n\turl = url || getCurrentUrl({ hash: true });\n\tconst state: HistoryState = {\n\t\turl,\n\t\trandom: Math.random(),\n\t\tsource: 'swup',\n\t\t...data\n\t};\n\twindow.history.pushState(state, '', url);\n};\n\n/** Update the current history record with a custom swup identifier. */\nexport const updateHistoryRecord = (url: string | null = null, data: HistoryData = {}): void => {\n\turl = url || getCurrentUrl({ hash: true });\n\tconst currentState = (window.history.state as HistoryState) || {};\n\tconst state: HistoryState = {\n\t\t...currentState,\n\t\turl,\n\t\trandom: Math.random(),\n\t\tsource: 'swup',\n\t\t...data\n\t};\n\twindow.history.replaceState(state, '', url);\n};\n", "import delegate, {\n\ttype DelegateEventHandler,\n\ttype DelegateOptions,\n\ttype EventType\n} from 'delegate-it';\nimport type { ParseSelector } from 'typed-query-selector/parser.js';\n\nexport type DelegateEventUnsubscribe = {\n\tdestroy: () => void;\n};\n\n/** Register a delegated event listener. */\nexport const delegateEvent = <\n\tSelector extends string,\n\tTElement extends Element = ParseSelector,\n\tTEvent extends EventType = EventType\n>(\n\tselector: Selector,\n\ttype: TEvent,\n\tcallback: DelegateEventHandler,\n\toptions?: DelegateOptions\n): DelegateEventUnsubscribe => {\n\tconst controller = new AbortController();\n\toptions = { ...options, signal: controller.signal };\n\tdelegate(selector, type, callback, options);\n\treturn { destroy: () => controller.abort() };\n};\n", "/**\n * A helper for creating a Location from either an element\n * or a URL object/string\n *\n */\nexport class Location extends URL {\n\tconstructor(url: URL | string, base: string = document.baseURI) {\n\t\tsuper(url.toString(), base);\n\t\t// Fix Safari bug with extending native classes\n\t\tObject.setPrototypeOf(this, Location.prototype);\n\t}\n\n\t/**\n\t * The full local path including query params.\n\t */\n\tget url(): string {\n\t\treturn this.pathname + this.search;\n\t}\n\n\t/**\n\t * Instantiate a Location from an element's href attribute\n\t * @param el\n\t * @returns new Location instance\n\t */\n\tstatic fromElement(el: Element): Location {\n\t\tconst href = el.getAttribute('href') || el.getAttribute('xlink:href') || '';\n\t\treturn new Location(href);\n\t}\n\n\t/**\n\t * Instantiate a Location from a URL object or string\n\t * @param url\n\t * @returns new Location instance\n\t */\n\tstatic fromUrl(url: URL | string): Location {\n\t\treturn new Location(url);\n\t}\n}\n", "import { match } from 'path-to-regexp';\n\nimport type {\n\tPath,\n\tParseOptions,\n\tTokensToRegexpOptions,\n\tRegexpToFunctionOptions,\n\tMatchFunction\n} from 'path-to-regexp';\n\nexport { type Path };\n\n/** Create a match function from a path pattern that checks if a URLs matches it. */\nexport const matchPath =

(\n\tpath: Path,\n\toptions?: ParseOptions & TokensToRegexpOptions & RegexpToFunctionOptions\n): MatchFunction

=> {\n\ttry {\n\t\treturn match

(path, options);\n\t} catch (error) {\n\t\tthrow new Error(`[swup] Error parsing path \"${String(path)}\":\\n${String(error)}`);\n\t}\n};\n", "import type Swup from '../Swup.js';\nimport { Location } from '../helpers.js';\nimport type { Visit } from './Visit.js';\n\n/** A page object as used by swup and its cache. */\nexport interface PageData {\n\t/** The URL of the page */\n\turl: string;\n\t/** The complete HTML response received from the server */\n\thtml: string;\n}\n\n/** Define how a page is fetched. */\nexport interface FetchOptions extends Omit {\n\t/** The request method. */\n\tmethod?: 'GET' | 'POST';\n\t/** The body of the request: raw string, form data object or URL params. */\n\tbody?: string | FormData | URLSearchParams;\n\t/** The request timeout in milliseconds. */\n\ttimeout?: number;\n\t/** Optional visit object with additional context. @internal */\n\tvisit?: Visit;\n}\n\nexport class FetchError extends Error {\n\turl: string;\n\tstatus?: number;\n\taborted: boolean;\n\ttimedOut: boolean;\n\tconstructor(\n\t\tmessage: string,\n\t\tdetails: { url: string; status?: number; aborted?: boolean; timedOut?: boolean }\n\t) {\n\t\tsuper(message);\n\t\tthis.name = 'FetchError';\n\t\tthis.url = details.url;\n\t\tthis.status = details.status;\n\t\tthis.aborted = details.aborted || false;\n\t\tthis.timedOut = details.timedOut || false;\n\t}\n}\n\n/**\n * Fetch a page from the server, return it and cache it.\n */\nexport async function fetchPage(\n\tthis: Swup,\n\turl: URL | string,\n\toptions: FetchOptions = {}\n): Promise {\n\turl = Location.fromUrl(url).url;\n\n\tconst { visit = this.visit } = options;\n\tconst headers = { ...this.options.requestHeaders, ...options.headers };\n\tconst timeout = options.timeout ?? this.options.timeout;\n\tconst controller = new AbortController();\n\tconst { signal } = controller;\n\toptions = { ...options, headers, signal };\n\n\tlet timedOut = false;\n\tlet timeoutId: ReturnType | null = null;\n\tif (timeout && timeout > 0) {\n\t\ttimeoutId = setTimeout(() => {\n\t\t\ttimedOut = true;\n\t\t\tcontroller.abort('timeout');\n\t\t}, timeout);\n\t}\n\n\t// Allow hooking before this and returning a custom response-like object (e.g. custom fetch implementation)\n\tlet response: Response;\n\ttry {\n\t\tresponse = await this.hooks.call(\n\t\t\t'fetch:request',\n\t\t\tvisit,\n\t\t\t{ url, options },\n\t\t\t(visit, { url, options }) => fetch(url, options)\n\t\t);\n\t\tif (timeoutId) {\n\t\t\tclearTimeout(timeoutId);\n\t\t}\n\t} catch (error) {\n\t\tif (timedOut) {\n\t\t\tthis.hooks.call('fetch:timeout', visit, { url });\n\t\t\tthrow new FetchError(`Request timed out: ${url}`, { url, timedOut });\n\t\t}\n\t\tif ((error as Error)?.name === 'AbortError' || signal.aborted) {\n\t\t\tthrow new FetchError(`Request aborted: ${url}`, { url, aborted: true });\n\t\t}\n\t\tthrow error;\n\t}\n\n\tconst { status, url: responseUrl } = response;\n\tconst html = await response.text();\n\n\tif (status === 500) {\n\t\tthis.hooks.call('fetch:error', visit, { status, response, url: responseUrl });\n\t\tthrow new FetchError(`Server error: ${responseUrl}`, { status, url: responseUrl });\n\t}\n\n\tif (!html) {\n\t\tthrow new FetchError(`Empty response: ${responseUrl}`, { status, url: responseUrl });\n\t}\n\n\t// Resolve real url after potential redirect\n\tconst { url: finalUrl } = Location.fromUrl(responseUrl);\n\tconst page = { url: finalUrl, html };\n\n\t// Write to cache for safe methods and non-redirects\n\tif (visit.cache.write && (!options.method || options.method === 'GET') && url === finalUrl) {\n\t\tthis.cache.set(page.url, page);\n\t}\n\n\treturn page;\n}\n", "import type Swup from '../Swup.js';\nimport { Location } from '../helpers.js';\nimport { type PageData } from './fetchPage.js';\n\nexport interface CacheData extends PageData {}\n\n/**\n * In-memory page cache.\n */\nexport class Cache {\n\t/** Swup instance this cache belongs to */\n\tprotected swup: Swup;\n\n\t/** Cached pages, indexed by URL */\n\tprotected pages: Map = new Map();\n\n\tconstructor(swup: Swup) {\n\t\tthis.swup = swup;\n\t}\n\n\t/** Number of cached pages in memory. */\n\tget size(): number {\n\t\treturn this.pages.size;\n\t}\n\n\t/** All cached pages. */\n\tget all() {\n\t\tconst copy = new Map();\n\t\tthis.pages.forEach((page, key) => {\n\t\t\tcopy.set(key, { ...page });\n\t\t});\n\t\treturn copy;\n\t}\n\n\t/** Check if the given URL has been cached. */\n\thas(url: string): boolean {\n\t\treturn this.pages.has(this.resolve(url));\n\t}\n\n\t/** Return a shallow copy of the cached page object if available. */\n\tget(url: string): CacheData | undefined {\n\t\tconst result = this.pages.get(this.resolve(url));\n\t\tif (!result) return result;\n\t\treturn { ...result };\n\t}\n\n\t/** Create a cache record for the specified URL. */\n\tset(url: string, page: CacheData) {\n\t\turl = this.resolve(url);\n\t\tpage = { ...page, url };\n\t\tthis.pages.set(url, page);\n\t\tthis.swup.hooks.callSync('cache:set', undefined, { page });\n\t}\n\n\t/** Update a cache record, overwriting or adding custom data. */\n\tupdate(url: string, payload: object) {\n\t\turl = this.resolve(url);\n\t\tconst page = { ...this.get(url), ...payload, url } as CacheData;\n\t\tthis.pages.set(url, page);\n\t}\n\n\t/** Delete a cache record. */\n\tdelete(url: string): void {\n\t\tthis.pages.delete(this.resolve(url));\n\t}\n\n\t/** Empty the cache. */\n\tclear(): void {\n\t\tthis.pages.clear();\n\t\tthis.swup.hooks.callSync('cache:clear', undefined, undefined);\n\t}\n\n\t/** Remove all cache entries that return true for a given predicate function. */\n\tprune(predicate: (url: string, page: CacheData) => boolean): void {\n\t\tthis.pages.forEach((page, url) => {\n\t\t\tif (predicate(url, page)) {\n\t\t\t\tthis.delete(url);\n\t\t\t}\n\t\t});\n\t}\n\n\t/** Resolve URLs by making them local and letting swup resolve them. */\n\tprotected resolve(urlToResolve: string): string {\n\t\tconst { url } = Location.fromUrl(urlToResolve);\n\t\treturn this.swup.resolveUrl(url);\n\t}\n}\n", "/** Find an element by selector. */\nexport const query = (selector: string, context: Document | Element = document) => {\n\treturn context.querySelector(selector);\n};\n\n/** Find a set of elements by selector. */\nexport const queryAll = (\n\tselector: string,\n\tcontext: Document | Element = document\n): HTMLElement[] => {\n\treturn Array.from(context.querySelectorAll(selector));\n};\n\n/** Return a Promise that resolves after the next event loop. */\nexport const nextTick = (): Promise => {\n\treturn new Promise((resolve) => {\n\t\trequestAnimationFrame(() => {\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\tresolve();\n\t\t\t});\n\t\t});\n\t});\n};\n\n/** Check if an object is a Promise or a Thenable */\nexport function isPromise(obj: unknown): obj is PromiseLike {\n\treturn (\n\t\t!!obj &&\n\t\t(typeof obj === 'object' || typeof obj === 'function') &&\n\t\ttypeof (obj as Record).then === 'function'\n\t);\n}\n\n/** Call a function as a Promise. Resolves with the returned Promsise or immediately. */\n// eslint-disable-next-line @typescript-eslint/ban-types, @typescript-eslint/no-explicit-any\nexport function runAsPromise(func: Function, args: unknown[] = []): Promise {\n\treturn new Promise((resolve, reject) => {\n\t\tconst result: unknown = func(...args);\n\t\tif (isPromise(result)) {\n\t\t\tresult.then(resolve, reject);\n\t\t} else {\n\t\t\tresolve(result);\n\t\t}\n\t});\n}\n\n/**\n * Force a layout reflow, e.g. after adding classnames\n * @returns The offset height, just here so it doesn't get optimized away by the JS engine\n * @see https://stackoverflow.com/a/21665117/3759615\n */\nexport function forceReflow(element?: HTMLElement) {\n\telement = element || document.body;\n\treturn element?.offsetHeight;\n}\n\n/** Escape a string with special chars to not break CSS selectors. */\nexport const escapeCssIdentifier = (ident: string) => {\n\t// @ts-ignore this is for support check, so it's correct that TS complains\n\tif (window.CSS && window.CSS.escape) {\n\t\treturn CSS.escape(ident);\n\t}\n\treturn ident;\n};\n\n/** Fix for Chrome below v61 formatting CSS floats with comma in some locales. */\nexport const toMs = (s: string) => {\n\treturn Number(s.slice(0, -1).replace(',', '.')) * 1000;\n};\n", "import type Swup from '../Swup.js';\nimport { queryAll } from '../utils.js';\n\nexport class Classes {\n\tprotected swup: Swup;\n\tprotected swupClasses = [\n\t\t'to-',\n\t\t'is-changing',\n\t\t'is-rendering',\n\t\t'is-popstate',\n\t\t'is-animating',\n\t\t'is-leaving'\n\t];\n\n\tconstructor(swup: Swup) {\n\t\tthis.swup = swup;\n\t}\n\n\tprotected get selectors(): string[] {\n\t\tconst { scope } = this.swup.visit.animation;\n\t\tif (scope === 'containers') return this.swup.visit.containers;\n\t\tif (scope === 'html') return ['html'];\n\t\tif (Array.isArray(scope)) return scope;\n\t\treturn [];\n\t}\n\n\tprotected get selector(): string {\n\t\treturn this.selectors.join(',');\n\t}\n\n\tprotected get targets(): HTMLElement[] {\n\t\tif (!this.selector.trim()) return [];\n\t\treturn queryAll(this.selector);\n\t}\n\n\tadd(...classes: string[]): void {\n\t\tthis.targets.forEach((target) => target.classList.add(...classes));\n\t}\n\n\tremove(...classes: string[]): void {\n\t\tthis.targets.forEach((target) => target.classList.remove(...classes));\n\t}\n\n\tclear(): void {\n\t\tthis.targets.forEach((target) => {\n\t\t\tconst remove = target.className.split(' ').filter((c) => this.isSwupClass(c));\n\t\t\ttarget.classList.remove(...remove);\n\t\t});\n\t}\n\n\tprotected isSwupClass(className: string): boolean {\n\t\treturn this.swupClasses.some((c) => className.startsWith(c));\n\t}\n}\n", "import type Swup from '../Swup.js';\nimport type { Options } from '../Swup.js';\nimport type { HistoryAction, HistoryDirection } from './navigate.js';\n\n/** See below for the class Visit {} definition */\n// export interface Visit {}\n\nexport interface VisitFrom {\n\t/** The URL of the previous page */\n\turl: string;\n}\n\nexport interface VisitTo {\n\t/** The URL of the next page */\n\turl: string;\n\t/** The hash of the next page */\n\thash?: string;\n\t/** The HTML content of the next page */\n\thtml?: string;\n}\n\nexport interface VisitAnimation {\n\t/** Whether this visit is animated. Default: `true` */\n\tanimate: boolean;\n\t/** Whether to wait for the next page to load before starting the animation. Default: `false` */\n\twait: boolean;\n\t/** Name of a custom animation to run. */\n\tname?: string;\n\t/** Whether this animation uses the native browser ViewTransition API. Default: `false` */\n\tnative: boolean;\n\t/** Elements on which to add animation classes. Default: `html` element */\n\tscope: 'html' | 'containers' | string[];\n\t/** Selector for detecting animation timing. Default: `[class*=\"transition-\"]` */\n\tselector: Options['animationSelector'];\n}\n\nexport interface VisitScroll {\n\t/** Whether to reset the scroll position after the visit. Default: `true` */\n\treset: boolean;\n\t/** Anchor element to scroll to on the next page. */\n\ttarget?: string | false;\n}\n\nexport interface VisitTrigger {\n\t/** DOM element that triggered this visit. */\n\tel?: Element;\n\t/** DOM event that triggered this visit. */\n\tevent?: Event;\n}\n\nexport interface VisitCache {\n\t/** Whether this visit will try to load the requested page from cache. */\n\tread: boolean;\n\t/** Whether this visit will save the loaded page in cache. */\n\twrite: boolean;\n}\n\nexport interface VisitHistory {\n\t/** History action to perform: `push` for creating a new history entry, `replace` for replacing the current entry. Default: `push` */\n\taction: HistoryAction;\n\t/** Whether this visit was triggered by a browser history navigation. */\n\tpopstate: boolean;\n\t/** The direction of travel in case of a browser history navigation: backward or forward. */\n\tdirection: HistoryDirection | undefined;\n}\n\nexport interface VisitInitOptions {\n\tto: string;\n\tfrom?: string;\n\thash?: string;\n\tel?: Element;\n\tevent?: Event;\n}\n\n/** @internal */\nexport const VisitState = {\n\tCREATED: 1,\n\tQUEUED: 2,\n\tSTARTED: 3,\n\tLEAVING: 4,\n\tLOADED: 5,\n\tENTERING: 6,\n\tCOMPLETED: 7,\n\tABORTED: 8,\n\tFAILED: 9\n} as const;\n\n/** @internal */\nexport type VisitState = (typeof VisitState)[keyof typeof VisitState];\n\n/** An object holding details about the current visit. */\nexport class Visit {\n\t/** A unique ID to identify this visit */\n\tid: number;\n\t/** The current state of this visit @internal */\n\tstate: VisitState;\n\t/** The previous page, about to leave */\n\tfrom: VisitFrom;\n\t/** The next page, about to enter */\n\tto: VisitTo;\n\t/** The content containers, about to be replaced */\n\tcontainers: Options['containers'];\n\t/** Information about animated page transitions */\n\tanimation: VisitAnimation;\n\t/** What triggered this visit */\n\ttrigger: VisitTrigger;\n\t/** Cache behavior for this visit */\n\tcache: VisitCache;\n\t/** Browser history behavior on this visit */\n\thistory: VisitHistory;\n\t/** Scroll behavior on this visit */\n\tscroll: VisitScroll;\n\n\tconstructor(swup: Swup, options: VisitInitOptions) {\n\t\tconst { to, from = swup.currentPageUrl, hash, el, event } = options;\n\n\t\tthis.id = Math.random();\n\t\tthis.state = VisitState.CREATED;\n\t\tthis.from = { url: from };\n\t\tthis.to = { url: to, hash };\n\t\tthis.containers = swup.options.containers;\n\t\tthis.animation = {\n\t\t\tanimate: true,\n\t\t\twait: false,\n\t\t\tname: undefined,\n\t\t\tnative: swup.options.native,\n\t\t\tscope: swup.options.animationScope,\n\t\t\tselector: swup.options.animationSelector\n\t\t};\n\t\tthis.trigger = { el, event };\n\t\tthis.cache = {\n\t\t\tread: swup.options.cache,\n\t\t\twrite: swup.options.cache\n\t\t};\n\t\tthis.history = {\n\t\t\taction: 'push',\n\t\t\tpopstate: false,\n\t\t\tdirection: undefined\n\t\t};\n\t\tthis.scroll = {\n\t\t\treset: true,\n\t\t\ttarget: undefined\n\t\t};\n\t}\n\t/** @internal */\n\tadvance(state: VisitState) {\n\t\tif (this.state < state) {\n\t\t\tthis.state = state;\n\t\t}\n\t}\n\n\t/** @internal */\n\tabort() {\n\t\tthis.state = VisitState.ABORTED;\n\t}\n\n\t/** Is this visit done, i.e. completed, failed, or aborted? */\n\tget done(): boolean {\n\t\treturn this.state >= VisitState.COMPLETED;\n\t}\n}\n\n/** Create a new visit object. */\nexport function createVisit(this: Swup, options: VisitInitOptions): Visit {\n\treturn new Visit(this, options);\n}\n", "import type { DelegateEvent } from 'delegate-it';\n\nimport type Swup from '../Swup.js';\nimport { isPromise, runAsPromise } from '../utils.js';\nimport { Visit } from './Visit.js';\nimport type { FetchOptions, PageData } from './fetchPage.js';\n\nexport interface HookDefinitions {\n\t'animation:out:start': undefined;\n\t'animation:out:await': { skip: boolean };\n\t'animation:out:end': undefined;\n\t'animation:in:start': undefined;\n\t'animation:in:await': { skip: boolean };\n\t'animation:in:end': undefined;\n\t'animation:skip': undefined;\n\t'cache:clear': undefined;\n\t'cache:set': { page: PageData };\n\t'content:replace': { page: PageData };\n\t'content:scroll': undefined;\n\t'enable': undefined;\n\t'disable': undefined;\n\t'fetch:request': { url: string; options: FetchOptions };\n\t'fetch:error': { url: string; status: number; response: Response };\n\t'fetch:timeout': { url: string };\n\t'history:popstate': { event: PopStateEvent };\n\t'link:click': { el: HTMLAnchorElement; event: DelegateEvent };\n\t'link:self': undefined;\n\t'link:anchor': { hash: string };\n\t'link:newtab': { href: string };\n\t'page:load': { page?: PageData; cache?: boolean; options: FetchOptions };\n\t'page:view': { url: string; title: string };\n\t'scroll:top': { options: ScrollIntoViewOptions };\n\t'scroll:anchor': { hash: string; options: ScrollIntoViewOptions };\n\t'visit:start': undefined;\n\t'visit:transition': undefined;\n\t'visit:abort': undefined;\n\t'visit:end': undefined;\n}\n\nexport interface HookReturnValues {\n\t'content:scroll': Promise | boolean;\n\t'fetch:request': Promise;\n\t'page:load': Promise;\n\t'scroll:top': boolean;\n\t'scroll:anchor': boolean;\n}\n\nexport type HookArguments = HookDefinitions[T];\n\nexport type HookName = keyof HookDefinitions;\n\n/** A generic hook handler. */\nexport type HookHandler = (\n\t/** Context about the current visit. */\n\tvisit: Visit,\n\t/** Local arguments passed into the handler. */\n\targs: HookArguments\n) => Promise | unknown;\n\n/** A default hook handler with an expected return type. */\nexport type HookDefaultHandler = (\n\t/** Context about the current visit. */\n\tvisit: Visit,\n\t/** Local arguments passed into the handler. */\n\targs: HookArguments,\n\t/** Default handler to be executed. Available if replacing an internal hook handler. */\n\tdefaultHandler?: HookDefaultHandler\n) => T extends keyof HookReturnValues ? HookReturnValues[T] : Promise | unknown;\n\nexport type Handlers = {\n\t[K in HookName]: HookHandler[];\n};\n\n/** Unregister a previously registered hook handler. */\nexport type HookUnregister = () => void;\n\n/** Define when and how a hook handler is executed. */\nexport type HookOptions = {\n\t/** Execute the hook once, then remove the handler */\n\tonce?: boolean;\n\t/** Execute the hook before the internal default handler */\n\tbefore?: boolean;\n\t/** Set a priority for when to execute this hook. Lower numbers execute first. Default: `0` */\n\tpriority?: number;\n\t/** Replace the internal default handler with this hook handler */\n\treplace?: boolean;\n};\n\nexport type HookRegistration<\n\tT extends HookName,\n\tH extends HookHandler | HookDefaultHandler = HookHandler\n> = {\n\tid: number;\n\thook: T;\n\thandler: H;\n\tdefaultHandler?: HookDefaultHandler;\n} & HookOptions;\n\ntype HookEventDetail = {\n\thook: HookName;\n\targs: unknown;\n\tvisit: Visit;\n};\n\nexport type HookEvent = CustomEvent;\n\ntype HookLedger = Map, HookRegistration>;\n\ninterface HookRegistry extends Map> {\n\tget(key: K): HookLedger | undefined;\n\tset(key: K, value: HookLedger): this;\n}\n\n/**\n * Hook registry.\n *\n * Create, trigger and handle hooks.\n *\n */\nexport class Hooks {\n\t/** Swup instance this registry belongs to */\n\tprotected swup: Swup;\n\n\t/** Map of all registered hook handlers. */\n\tprotected registry: HookRegistry = new Map();\n\n\t// Can we deduplicate this somehow? Or make it error when not in sync with HookDefinitions?\n\t// https://stackoverflow.com/questions/53387838/how-to-ensure-an-arrays-values-the-keys-of-a-typescript-interface/53395649\n\tprotected readonly hooks: HookName[] = [\n\t\t'animation:out:start',\n\t\t'animation:out:await',\n\t\t'animation:out:end',\n\t\t'animation:in:start',\n\t\t'animation:in:await',\n\t\t'animation:in:end',\n\t\t'animation:skip',\n\t\t'cache:clear',\n\t\t'cache:set',\n\t\t'content:replace',\n\t\t'content:scroll',\n\t\t'enable',\n\t\t'disable',\n\t\t'fetch:request',\n\t\t'fetch:error',\n\t\t'fetch:timeout',\n\t\t'history:popstate',\n\t\t'link:click',\n\t\t'link:self',\n\t\t'link:anchor',\n\t\t'link:newtab',\n\t\t'page:load',\n\t\t'page:view',\n\t\t'scroll:top',\n\t\t'scroll:anchor',\n\t\t'visit:start',\n\t\t'visit:transition',\n\t\t'visit:abort',\n\t\t'visit:end'\n\t];\n\n\tconstructor(swup: Swup) {\n\t\tthis.swup = swup;\n\t\tthis.init();\n\t}\n\n\t/**\n\t * Create ledgers for all core hooks.\n\t */\n\tprotected init() {\n\t\tthis.hooks.forEach((hook) => this.create(hook));\n\t}\n\n\t/**\n\t * Create a new hook type.\n\t */\n\tcreate(hook: string) {\n\t\tif (!this.registry.has(hook as HookName)) {\n\t\t\tthis.registry.set(hook as HookName, new Map());\n\t\t}\n\t}\n\n\t/**\n\t * Check if a hook type exists.\n\t */\n\texists(hook: HookName): boolean {\n\t\treturn this.registry.has(hook);\n\t}\n\n\t/**\n\t * Get the ledger with all registrations for a hook.\n\t */\n\tprotected get(hook: T): HookLedger | undefined {\n\t\tconst ledger = this.registry.get(hook);\n\t\tif (ledger) {\n\t\t\treturn ledger;\n\t\t}\n\t\tconsole.error(`Unknown hook '${hook}'`);\n\t}\n\n\t/**\n\t * Remove all handlers of all hooks.\n\t */\n\tclear() {\n\t\tthis.registry.forEach((ledger) => ledger.clear());\n\t}\n\n\t/**\n\t * Register a new hook handler.\n\t * @param hook Name of the hook to listen for\n\t * @param handler The handler function to execute\n\t * @param options Object to specify how and when the handler is executed\n\t * Available options:\n\t * - `once`: Only execute the handler once\n\t * - `before`: Execute the handler before the default handler\n\t * - `priority`: Specify the order in which the handlers are executed\n\t * - `replace`: Replace the default handler with this handler\n\t * @returns A function to unregister the handler\n\t */\n\n\t// Overload: replacing default handler\n\ton(hook: T, handler: HookDefaultHandler, options: O & { replace: true }): HookUnregister; // prettier-ignore\n\t// Overload: passed in handler options\n\ton(hook: T, handler: HookHandler, options: O): HookUnregister; // prettier-ignore\n\t// Overload: no handler options\n\ton(hook: T, handler: HookHandler): HookUnregister; // prettier-ignore\n\t// Implementation\n\ton(\n\t\thook: T,\n\t\thandler: O['replace'] extends true ? HookDefaultHandler : HookHandler,\n\t\toptions: Partial = {}\n\t): HookUnregister {\n\t\tconst ledger = this.get(hook);\n\t\tif (!ledger) {\n\t\t\tconsole.warn(`Hook '${hook}' not found.`);\n\t\t\treturn () => {};\n\t\t}\n\n\t\tconst id = ledger.size + 1;\n\t\tconst registration: HookRegistration = { ...options, id, hook, handler };\n\t\tledger.set(handler, registration);\n\n\t\treturn () => this.off(hook, handler);\n\t}\n\n\t/**\n\t * Register a new hook handler to run before the default handler.\n\t * Shortcut for `hooks.on(hook, handler, { before: true })`.\n\t * @param hook Name of the hook to listen for\n\t * @param handler The handler function to execute\n\t * @param options Any other event options (see `hooks.on()` for details)\n\t * @returns A function to unregister the handler\n\t * @see on\n\t */\n\t// Overload: passed in handler options\n\tbefore(hook: T, handler: HookHandler, options: HookOptions): HookUnregister; // prettier-ignore\n\t// Overload: no handler options\n\tbefore(hook: T, handler: HookHandler): HookUnregister;\n\t// Implementation\n\tbefore(\n\t\thook: T,\n\t\thandler: HookHandler,\n\t\toptions: HookOptions = {}\n\t): HookUnregister {\n\t\treturn this.on(hook, handler, { ...options, before: true });\n\t}\n\n\t/**\n\t * Register a new hook handler to replace the default handler.\n\t * Shortcut for `hooks.on(hook, handler, { replace: true })`.\n\t * @param hook Name of the hook to listen for\n\t * @param handler The handler function to execute instead of the default handler\n\t * @param options Any other event options (see `hooks.on()` for details)\n\t * @returns A function to unregister the handler\n\t * @see on\n\t */\n\t// Overload: passed in handler options\n\treplace(hook: T, handler: HookDefaultHandler, options: HookOptions): HookUnregister; // prettier-ignore\n\t// Overload: no handler options\n\treplace(hook: T, handler: HookDefaultHandler): HookUnregister; // prettier-ignore\n\t// Implementation\n\treplace(\n\t\thook: T,\n\t\thandler: HookDefaultHandler,\n\t\toptions: HookOptions = {}\n\t): HookUnregister {\n\t\treturn this.on(hook, handler, { ...options, replace: true });\n\t}\n\n\t/**\n\t * Register a new hook handler to run once.\n\t * Shortcut for `hooks.on(hook, handler, { once: true })`.\n\t * @param hook Name of the hook to listen for\n\t * @param handler The handler function to execute\n\t * @param options Any other event options (see `hooks.on()` for details)\n\t * @see on\n\t */\n\t// Overload: passed in handler options\n\tonce(hook: T, handler: HookHandler, options: HookOptions): HookUnregister; // prettier-ignore\n\t// Overload: no handler options\n\tonce(hook: T, handler: HookHandler): HookUnregister;\n\t// Implementation\n\tonce(\n\t\thook: T,\n\t\thandler: HookHandler,\n\t\toptions: HookOptions = {}\n\t): HookUnregister {\n\t\treturn this.on(hook, handler, { ...options, once: true });\n\t}\n\n\t/**\n\t * Unregister a hook handler.\n\t * @param hook Name of the hook the handler is registered for\n\t * @param handler The handler function that was registered.\n\t * If omitted, all handlers for the hook will be removed.\n\t */\n\t// Overload: unregister a specific handler\n\toff(hook: T, handler: HookHandler | HookDefaultHandler): void;\n\t// Overload: unregister all handlers\n\toff(hook: T): void;\n\t// Implementation\n\toff(hook: T, handler?: HookHandler | HookDefaultHandler): void {\n\t\tconst ledger = this.get(hook);\n\t\tif (ledger && handler) {\n\t\t\tconst deleted = ledger.delete(handler);\n\t\t\tif (!deleted) {\n\t\t\t\tconsole.warn(`Handler for hook '${hook}' not found.`);\n\t\t\t}\n\t\t} else if (ledger) {\n\t\t\tledger.clear();\n\t\t}\n\t}\n\n\t/**\n\t * Trigger a hook asynchronously, executing its default handler and all registered handlers.\n\t * Will execute all handlers in order and `await` any `Promise`s they return.\n\t * @param hook Name of the hook to trigger\n\t * @param visit The visit object this hook belongs to\n\t * @param args Arguments to pass to the handler\n\t * @param defaultHandler A default implementation of this hook to execute\n\t * @returns The resolved return value of the executed default handler\n\t */\n\t// Overload: default order of arguments\n\tasync call(hook: T, visit: Visit | undefined, args: HookArguments, defaultHandler?: HookDefaultHandler): Promise>>>; // prettier-ignore\n\t// Overload: legacy order of arguments, with visit missing\n\tasync call(hook: T, args: HookArguments, defaultHandler?: HookDefaultHandler): Promise>>>; // prettier-ignore\n\t// Implementation\n\tasync call(\n\t\thook: T,\n\t\targ1: Visit | HookArguments,\n\t\targ2: HookArguments | HookDefaultHandler,\n\t\targ3?: HookDefaultHandler\n\t): Promise>>> {\n\t\tconst [visit, args, defaultHandler] = this.parseCallArgs(hook, arg1, arg2, arg3);\n\n\t\tconst { before, handler, after } = this.getHandlers(hook, defaultHandler);\n\t\tawait this.run(before, visit, args);\n\t\tconst [result] = await this.run(handler, visit, args, true);\n\t\tawait this.run(after, visit, args);\n\t\tthis.dispatchDomEvent(hook, visit, args);\n\t\treturn result;\n\t}\n\n\t/**\n\t * Trigger a hook synchronously, executing its default handler and all registered handlers.\n\t * Will execute all handlers in order, but will **not** `await` any `Promise`s they return.\n\t * @param hook Name of the hook to trigger\n\t * @param visit The visit object this hook belongs to\n\t * @param args Arguments to pass to the handler\n\t * @param defaultHandler A default implementation of this hook to execute\n\t * @returns The (possibly unresolved) return value of the executed default handler\n\t */\n\t// Overload: default order of arguments\n\tcallSync(hook: T, visit: Visit | undefined, args: HookArguments, defaultHandler?: HookDefaultHandler): ReturnType>; // prettier-ignore\n\t// Overload: legacy order of arguments, with visit missing\n\tcallSync(hook: T, args: HookArguments, defaultHandler?: HookDefaultHandler): ReturnType>; // prettier-ignore\n\t// Implementation\n\tcallSync(\n\t\thook: T,\n\t\targ1: Visit | HookArguments,\n\t\targ2: HookArguments | HookDefaultHandler,\n\t\targ3?: HookDefaultHandler\n\t): ReturnType> {\n\t\tconst [visit, args, defaultHandler] = this.parseCallArgs(hook, arg1, arg2, arg3);\n\t\tconst { before, handler, after } = this.getHandlers(hook, defaultHandler);\n\t\tthis.runSync(before, visit, args);\n\t\tconst [result] = this.runSync(handler, visit, args, true);\n\t\tthis.runSync(after, visit, args);\n\t\tthis.dispatchDomEvent(hook, visit, args);\n\t\treturn result;\n\t}\n\n\t/**\n\t * Parse the call arguments for call() and callSync() to allow legacy argument order.\n\t */\n\tprotected parseCallArgs(\n\t\thook: T,\n\t\targ1: Visit | HookArguments | undefined,\n\t\targ2: HookArguments | HookDefaultHandler,\n\t\targ3?: HookDefaultHandler\n\t): [Visit | undefined, HookArguments, HookDefaultHandler | undefined] {\n\t\tconst isLegacyOrder =\n\t\t\t!(arg1 instanceof Visit) && (typeof arg1 === 'object' || typeof arg2 === 'function');\n\t\tif (isLegacyOrder) {\n\t\t\t// Legacy positioning: arguments in second or handler passed in third place\n\t\t\treturn [undefined, arg1 as HookArguments, arg2 as HookDefaultHandler];\n\t\t} else {\n\t\t\t// Default positioning: visit passed in as first argument\n\t\t\treturn [arg1, arg2 as HookArguments, arg3];\n\t\t}\n\t}\n\n\t/**\n\t * Execute the handlers for a hook, in order, as `Promise`s that will be `await`ed.\n\t * @param registrations The registrations (handler + options) to execute\n\t * @param args Arguments to pass to the handler\n\t */\n\n\t// Overload: running HookDefaultHandler: expect HookDefaultHandler return type\n\tprotected async run(registrations: HookRegistration>[], visit: Visit | undefined, args: HookArguments, rethrow: true): Promise>>[]>; // prettier-ignore\n\t// Overload: running user handler: expect no specific type\n\tprotected async run(registrations: HookRegistration[], visit: Visit | undefined, args: HookArguments): Promise; // prettier-ignore\n\t// Implementation\n\tprotected async run[]>(\n\t\tregistrations: R,\n\t\tvisit: Visit | undefined = this.swup.visit,\n\t\targs: HookArguments,\n\t\trethrow: boolean = false\n\t): Promise>> | unknown[]> {\n\t\tconst results = [];\n\t\tfor (const { hook, handler, defaultHandler, once } of registrations) {\n\t\t\tif (visit?.done) continue;\n\t\t\tif (once) this.off(hook, handler);\n\t\t\ttry {\n\t\t\t\tconst result = await runAsPromise(handler, [visit, args, defaultHandler]);\n\t\t\t\tresults.push(result);\n\t\t\t} catch (error) {\n\t\t\t\tif (rethrow) {\n\t\t\t\t\tthrow error;\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(`Error in hook '${hook}':`, error);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn results;\n\t}\n\n\t/**\n\t * Execute the handlers for a hook, in order, without `await`ing any returned `Promise`s.\n\t * @param registrations The registrations (handler + options) to execute\n\t * @param args Arguments to pass to the handler\n\t */\n\n\t// Overload: running HookDefaultHandler: expect HookDefaultHandler return type\n\tprotected runSync(registrations: HookRegistration>[], visit: Visit | undefined, args: HookArguments, rethrow: true): ReturnType>[]; // prettier-ignore\n\t// Overload: running user handler: expect no specific type\n\tprotected runSync(registrations: HookRegistration[], visit: Visit | undefined, args: HookArguments): unknown[]; // prettier-ignore\n\t// Implementation\n\tprotected runSync[]>(\n\t\tregistrations: R,\n\t\tvisit: Visit | undefined = this.swup.visit,\n\t\targs: HookArguments,\n\t\trethrow: boolean = false\n\t): (ReturnType> | unknown)[] {\n\t\tconst results = [];\n\t\tfor (const { hook, handler, defaultHandler, once } of registrations) {\n\t\t\tif (visit?.done) continue;\n\t\t\tif (once) this.off(hook, handler);\n\t\t\ttry {\n\t\t\t\tconst result = (handler as HookDefaultHandler)(visit, args, defaultHandler);\n\t\t\t\tresults.push(result);\n\t\t\t\tif (isPromise(result)) {\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t`Swup will not await Promises in handler for synchronous hook '${hook}'.`\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tif (rethrow) {\n\t\t\t\t\tthrow error;\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(`Error in hook '${hook}':`, error);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn results;\n\t}\n\n\t/**\n\t * Get all registered handlers for a hook, sorted by priority and registration order.\n\t * @param hook Name of the hook\n\t * @param defaultHandler The optional default handler of this hook\n\t * @returns An object with the handlers sorted into `before` and `after` arrays,\n\t * as well as a flag indicating if the original handler was replaced\n\t */\n\tprotected getHandlers(hook: T, defaultHandler?: HookDefaultHandler) {\n\t\tconst ledger = this.get(hook);\n\t\tif (!ledger) {\n\t\t\treturn { found: false, before: [], handler: [], after: [], replaced: false };\n\t\t}\n\n\t\tconst registrations = Array.from(ledger.values());\n\n\t\t// Let TypeScript know that replaced handlers are default handlers by filtering to true\n\t\tconst def = (T: HookRegistration): T is HookRegistration> => true; // prettier-ignore\n\t\tconst sort = this.sortRegistrations;\n\n\t\t// Filter into before, after, and replace handlers\n\t\tconst before = registrations.filter(({ before, replace }) => before && !replace).sort(sort);\n\t\tconst replace = registrations.filter(({ replace }) => replace).filter(def).sort(sort); // prettier-ignore\n\t\tconst after = registrations.filter(({ before, replace }) => !before && !replace).sort(sort);\n\t\tconst replaced = replace.length > 0;\n\n\t\t// Define main handler registration\n\t\t// Created as HookRegistration[] array to allow passing it into hooks.run() directly\n\t\tlet handler: HookRegistration>[] = [];\n\t\tif (defaultHandler) {\n\t\t\thandler = [{ id: 0, hook, handler: defaultHandler }];\n\t\t\tif (replaced) {\n\t\t\t\tconst index = replace.length - 1;\n\t\t\t\tconst replacingHandler = replace[index].handler;\n\t\t\t\tconst createDefaultHandler = (index: number): HookDefaultHandler | undefined => {\n\t\t\t\t\tconst next = replace[index - 1];\n\t\t\t\t\tif (next) {\n\t\t\t\t\t\treturn (visit, args) =>\n\t\t\t\t\t\t\tnext.handler(visit, args, createDefaultHandler(index - 1));\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn defaultHandler;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tconst nestedDefaultHandler = createDefaultHandler(index);\n\t\t\t\thandler = [\n\t\t\t\t\t{ id: 0, hook, handler: replacingHandler, defaultHandler: nestedDefaultHandler }\n\t\t\t\t];\n\t\t\t}\n\t\t}\n\n\t\treturn { found: true, before, handler, after, replaced };\n\t}\n\n\t/**\n\t * Sort two hook registrations by priority and registration order.\n\t * @param a The registration object to compare\n\t * @param b The other registration object to compare with\n\t * @returns The sort direction\n\t */\n\tprotected sortRegistrations(\n\t\ta: HookRegistration,\n\t\tb: HookRegistration\n\t): number {\n\t\tconst priority = (a.priority ?? 0) - (b.priority ?? 0);\n\t\tconst id = a.id - b.id;\n\t\treturn priority || id || 0;\n\t}\n\n\t/**\n\t * Dispatch a custom event on the `document` for a hook. Prefixed with `swup:`\n\t * @param hook Name of the hook.\n\t */\n\tprotected dispatchDomEvent(\n\t\thook: T,\n\t\tvisit: Visit | undefined,\n\t\targs?: HookArguments\n\t): void {\n\t\tif (visit?.done) return;\n\n\t\tconst detail: HookEventDetail = { hook, args, visit: visit || this.swup.visit };\n\t\tdocument.dispatchEvent(\n\t\t\tnew CustomEvent(`swup:any`, { detail, bubbles: true })\n\t\t);\n\t\tdocument.dispatchEvent(\n\t\t\tnew CustomEvent(`swup:${hook}`, { detail, bubbles: true })\n\t\t);\n\t}\n}\n", "import { escapeCssIdentifier as escape, query } from '../utils.js';\n\n/**\n * Find the anchor element for a given hash.\n *\n * @param hash Hash with or without leading '#'\n * @returns The element, if found, or null.\n *\n * @see https://html.spec.whatwg.org/#find-a-potential-indicated-element\n */\nexport const getAnchorElement = (hash?: string): Element | null => {\n\tif (hash && hash.charAt(0) === '#') {\n\t\thash = hash.substring(1);\n\t}\n\n\tif (!hash) {\n\t\treturn null;\n\t}\n\n\tconst decoded = decodeURIComponent(hash);\n\tlet element =\n\t\tdocument.getElementById(hash) ||\n\t\tdocument.getElementById(decoded) ||\n\t\tquery(`a[name='${escape(hash)}']`) ||\n\t\tquery(`a[name='${escape(decoded)}']`);\n\n\tif (!element && hash === 'top') {\n\t\telement = document.body;\n\t}\n\n\treturn element;\n};\n", "import { queryAll, toMs } from '../utils.js';\nimport type Swup from '../Swup.js';\nimport type { Options } from '../Swup.js';\n\nconst TRANSITION = 'transition';\nconst ANIMATION = 'animation';\n\ntype AnimationTypes = typeof TRANSITION | typeof ANIMATION;\ntype AnimationProperties = 'Delay' | 'Duration';\ntype AnimationStyleKeys = `${AnimationTypes}${AnimationProperties}` | 'transitionProperty';\ntype AnimationStyleDeclarations = Pick;\n\nexport type AnimationDirection = 'in' | 'out';\n\n/**\n * Return a Promise that resolves when all CSS animations and transitions\n * are done on the page. Filters by selector or takes elements directly.\n */\nexport async function awaitAnimations(\n\tthis: Swup,\n\t{\n\t\telements,\n\t\tselector\n\t}: {\n\t\tselector: Options['animationSelector'];\n\t\telements?: NodeListOf | HTMLElement[];\n\t}\n): Promise {\n\t// Allow usage of swup without animations: { animationSelector: false }\n\tif (selector === false && !elements) {\n\t\treturn;\n\t}\n\n\t// Allow passing in elements\n\tlet animatedElements: HTMLElement[] = [];\n\tif (elements) {\n\t\tanimatedElements = Array.from(elements);\n\t} else if (selector) {\n\t\tanimatedElements = queryAll(selector, document.body);\n\t\t// Warn if no elements match the selector, but keep things going\n\t\tif (!animatedElements.length) {\n\t\t\tconsole.warn(`[swup] No elements found matching animationSelector \\`${selector}\\``);\n\t\t\treturn;\n\t\t}\n\t}\n\n\tconst awaitedAnimations = animatedElements.map((el) => awaitAnimationsOnElement(el));\n\tconst hasAnimations = awaitedAnimations.filter(Boolean).length > 0;\n\tif (!hasAnimations) {\n\t\tif (selector) {\n\t\t\tconsole.warn(\n\t\t\t\t`[swup] No CSS animation duration defined on elements matching \\`${selector}\\``\n\t\t\t);\n\t\t}\n\t\treturn;\n\t}\n\n\tawait Promise.all(awaitedAnimations);\n}\n\nfunction awaitAnimationsOnElement(element: Element): Promise | false {\n\tconst { type, timeout, propCount } = getTransitionInfo(element);\n\n\t// Resolve immediately if no transition defined\n\tif (!type || !timeout) {\n\t\treturn false;\n\t}\n\n\treturn new Promise((resolve) => {\n\t\tconst endEvent = `${type}end`;\n\t\tconst startTime = performance.now();\n\t\tlet propsTransitioned = 0;\n\n\t\tconst end = () => {\n\t\t\telement.removeEventListener(endEvent, onEnd);\n\t\t\tresolve();\n\t\t};\n\n\t\tconst onEnd: EventListener = (event) => {\n\t\t\t// Skip transitions on child elements\n\t\t\tif (event.target !== element) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!isTransitionOrAnimationEvent(event)) {\n\t\t\t\tthrow new Error('Not a transition or animation event.');\n\t\t\t}\n\n\t\t\t// Skip transitions that happened before we started listening\n\t\t\tconst elapsedTime = (performance.now() - startTime) / 1000;\n\t\t\tif (elapsedTime < event.elapsedTime) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// End if all properties have transitioned\n\t\t\tif (++propsTransitioned >= propCount) {\n\t\t\t\tend();\n\t\t\t}\n\t\t};\n\n\t\tsetTimeout(() => {\n\t\t\tif (propsTransitioned < propCount) {\n\t\t\t\tend();\n\t\t\t}\n\t\t}, timeout + 1);\n\n\t\telement.addEventListener(endEvent, onEnd);\n\t});\n}\n\nexport function getTransitionInfo(element: Element, expectedType?: AnimationTypes) {\n\tconst styles = window.getComputedStyle(element) as AnimationStyleDeclarations;\n\n\tconst transitionDelays = getStyleProperties(styles, `${TRANSITION}Delay`);\n\tconst transitionDurations = getStyleProperties(styles, `${TRANSITION}Duration`);\n\tconst transitionTimeout = calculateTimeout(transitionDelays, transitionDurations);\n\tconst animationDelays = getStyleProperties(styles, `${ANIMATION}Delay`);\n\tconst animationDurations = getStyleProperties(styles, `${ANIMATION}Duration`);\n\tconst animationTimeout = calculateTimeout(animationDelays, animationDurations);\n\n\tlet type: AnimationTypes | null = null;\n\tlet timeout = 0;\n\tlet propCount = 0;\n\n\tif (expectedType === TRANSITION) {\n\t\tif (transitionTimeout > 0) {\n\t\t\ttype = TRANSITION;\n\t\t\ttimeout = transitionTimeout;\n\t\t\tpropCount = transitionDurations.length;\n\t\t}\n\t} else if (expectedType === ANIMATION) {\n\t\tif (animationTimeout > 0) {\n\t\t\ttype = ANIMATION;\n\t\t\ttimeout = animationTimeout;\n\t\t\tpropCount = animationDurations.length;\n\t\t}\n\t} else {\n\t\ttimeout = Math.max(transitionTimeout, animationTimeout);\n\t\ttype = timeout > 0 ? (transitionTimeout > animationTimeout ? TRANSITION : ANIMATION) : null;\n\t\tpropCount = type\n\t\t\t? type === TRANSITION\n\t\t\t\t? transitionDurations.length\n\t\t\t\t: animationDurations.length\n\t\t\t: 0;\n\t}\n\n\treturn {\n\t\ttype,\n\t\ttimeout,\n\t\tpropCount\n\t};\n}\n\nfunction isTransitionOrAnimationEvent(event: Event): event is TransitionEvent | AnimationEvent {\n\treturn [`${TRANSITION}end`, `${ANIMATION}end`].includes(event.type);\n}\n\nfunction getStyleProperties(styles: AnimationStyleDeclarations, key: AnimationStyleKeys): string[] {\n\treturn (styles[key] || '').split(', ');\n}\n\nfunction calculateTimeout(delays: string[], durations: string[]): number {\n\twhile (delays.length < durations.length) {\n\t\tdelays = delays.concat(delays);\n\t}\n\n\treturn Math.max(...durations.map((duration, i) => toMs(duration) + toMs(delays[i])));\n}\n", "import type Swup from '../Swup.js';\nimport { FetchError, type FetchOptions, type PageData } from './fetchPage.js';\nimport { type VisitInitOptions, type Visit, VisitState } from './Visit.js';\nimport {\n\tcreateHistoryRecord,\n\tupdateHistoryRecord,\n\tgetCurrentUrl,\n\tLocation,\n\tclassify\n} from '../helpers.js';\n\nexport type HistoryAction = 'push' | 'replace';\nexport type HistoryDirection = 'forwards' | 'backwards';\nexport type NavigationToSelfAction = 'scroll' | 'navigate';\nexport type CacheControl = Partial<{ read: boolean; write: boolean }>;\n\n/** Define how to navigate to a page. */\ntype NavigationOptions = {\n\t/** Whether this visit is animated. Default: `true` */\n\tanimate?: boolean;\n\t/** Name of a custom animation to run. */\n\tanimation?: string;\n\t/** History action to perform: `push` for creating a new history entry, `replace` for replacing the current entry. Default: `push` */\n\thistory?: HistoryAction;\n\t/** Whether this visit should read from or write to the cache. */\n\tcache?: CacheControl;\n};\n\n/**\n * Navigate to a new URL.\n * @param url The URL to navigate to.\n * @param options Options for how to perform this visit.\n * @returns Promise\n */\nexport function navigate(\n\tthis: Swup,\n\turl: string,\n\toptions: NavigationOptions & FetchOptions = {},\n\tinit: Omit = {}\n) {\n\tif (typeof url !== 'string') {\n\t\tthrow new Error(`swup.navigate() requires a URL parameter`);\n\t}\n\n\t// Check if the visit should be ignored\n\tif (this.shouldIgnoreVisit(url, { el: init.el, event: init.event })) {\n\t\twindow.location.assign(url);\n\t\treturn;\n\t}\n\n\tconst { url: to, hash } = Location.fromUrl(url);\n\n\tconst visit = this.createVisit({ ...init, to, hash });\n\tthis.performNavigation(visit, options);\n}\n\n/**\n * Start a visit to a new URL.\n *\n * Internal method that assumes the visit context has already been created.\n *\n * As a user, you should call `swup.navigate(url)` instead.\n *\n * @param url The URL to navigate to.\n * @param options Options for how to perform this visit.\n * @returns Promise\n */\nexport async function performNavigation(\n\tthis: Swup,\n\tvisit: Visit,\n\toptions: NavigationOptions & FetchOptions = {}\n): Promise {\n\tif (this.navigating) {\n\t\tif (this.visit.state >= VisitState.ENTERING) {\n\t\t\t// Currently navigating and content already loaded? Finish and queue\n\t\t\tvisit.state = VisitState.QUEUED;\n\t\t\tthis.onVisitEnd = () => this.performNavigation(visit, options);\n\t\t\treturn;\n\t\t} else {\n\t\t\t// Currently navigating and content not loaded? Abort running visit\n\t\t\tawait this.hooks.call('visit:abort', this.visit, undefined);\n\t\t\tthis.visit.state = VisitState.ABORTED;\n\t\t}\n\t}\n\n\tthis.navigating = true;\n\tthis.visit = visit;\n\n\tconst { el } = visit.trigger;\n\toptions.referrer = options.referrer || this.currentPageUrl;\n\n\tif (options.animate === false) {\n\t\tvisit.animation.animate = false;\n\t}\n\n\t// Clean up old animation classes\n\tif (!visit.animation.animate) {\n\t\tthis.classes.clear();\n\t}\n\n\t// Get history action from option or attribute on trigger element\n\tconst history = options.history || el?.getAttribute('data-swup-history') || undefined;\n\tif (history && ['push', 'replace'].includes(history)) {\n\t\tvisit.history.action = history as HistoryAction;\n\t}\n\n\t// Get custom animation name from option or attribute on trigger element\n\tconst animation = options.animation || el?.getAttribute('data-swup-animation') || undefined;\n\tif (animation) {\n\t\tvisit.animation.name = animation;\n\t}\n\n\t// Sanitize cache option\n\tif (typeof options.cache === 'object') {\n\t\tvisit.cache.read = options.cache.read ?? visit.cache.read;\n\t\tvisit.cache.write = options.cache.write ?? visit.cache.write;\n\t} else if (options.cache !== undefined) {\n\t\tvisit.cache = { read: !!options.cache, write: !!options.cache };\n\t}\n\t// Delete this so that window.fetch doesn't mis-interpret it\n\tdelete options.cache;\n\n\ttry {\n\t\tawait this.hooks.call('visit:start', visit, undefined);\n\t\tvisit.state = VisitState.STARTED;\n\n\t\t// Begin loading page\n\t\tconst page = this.hooks.call('page:load', visit, { options }, async (visit, args) => {\n\t\t\t// Read from cache\n\t\t\tlet cachedPage: PageData | undefined;\n\t\t\tif (visit.cache.read) {\n\t\t\t\tcachedPage = this.cache.get(visit.to.url);\n\t\t\t}\n\n\t\t\targs.page = cachedPage || (await this.fetchPage(visit.to.url, args.options));\n\t\t\targs.cache = !!cachedPage;\n\n\t\t\treturn args.page;\n\t\t});\n\n\t\t// When page loaded: mark visit as loaded, save html into visit object\n\t\tpage.then(({ html }) => {\n\t\t\tvisit.advance(VisitState.LOADED);\n\t\t\tvisit.to.html = html;\n\t\t});\n\n\t\t// Create/update history record if this is not a popstate call or leads to the same URL\n\t\tif (!visit.history.popstate) {\n\t\t\t// Add the hash directly from the trigger element\n\t\t\tconst newUrl = visit.to.url + visit.to.hash;\n\t\t\tif (visit.history.action === 'replace' || visit.to.url === this.currentPageUrl) {\n\t\t\t\tupdateHistoryRecord(newUrl);\n\t\t\t} else {\n\t\t\t\tthis.currentHistoryIndex++;\n\t\t\t\tcreateHistoryRecord(newUrl, { index: this.currentHistoryIndex });\n\t\t\t}\n\t\t}\n\n\t\tthis.currentPageUrl = getCurrentUrl();\n\n\t\t// Mark visit type with classes\n\t\tif (visit.history.popstate) {\n\t\t\tthis.classes.add('is-popstate');\n\t\t}\n\t\tif (visit.animation.name) {\n\t\t\tthis.classes.add(`to-${classify(visit.animation.name)}`);\n\t\t}\n\n\t\t// Wait for page before starting to animate out?\n\t\tif (visit.animation.wait) {\n\t\t\tawait page;\n\t\t}\n\n\t\t// Check if failed/aborted in the meantime\n\t\tif (visit.done) return;\n\n\t\t// Perform the actual transition: animate and replace content\n\t\tawait this.hooks.call('visit:transition', visit, undefined, async () => {\n\t\t\t// No animation? Just await page and render\n\t\t\tif (!visit.animation.animate) {\n\t\t\t\tawait this.hooks.call('animation:skip', undefined);\n\t\t\t\tawait this.renderPage(visit, await page);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Animate page out, render page, animate page in\n\t\t\tvisit.advance(VisitState.LEAVING);\n\t\t\tawait this.animatePageOut(visit);\n\t\t\tif (visit.animation.native && document.startViewTransition) {\n\t\t\t\tawait document.startViewTransition(\n\t\t\t\t\tasync () => await this.renderPage(visit, await page)\n\t\t\t\t).finished;\n\t\t\t} else {\n\t\t\t\tawait this.renderPage(visit, await page);\n\t\t\t}\n\t\t\tawait this.animatePageIn(visit);\n\t\t});\n\n\t\t// Check if failed/aborted in the meantime\n\t\tif (visit.done) return;\n\n\t\t// Finalize visit\n\t\tawait this.hooks.call('visit:end', visit, undefined, () => this.classes.clear());\n\t\tvisit.state = VisitState.COMPLETED;\n\t\tthis.navigating = false;\n\n\t\t/** Run eventually queued function */\n\t\tif (this.onVisitEnd) {\n\t\t\tthis.onVisitEnd();\n\t\t\tthis.onVisitEnd = undefined;\n\t\t}\n\t} catch (error) {\n\t\t// Return early if error is undefined or signals an aborted request\n\t\tif (!error || (error as FetchError)?.aborted) {\n\t\t\tvisit.state = VisitState.ABORTED;\n\t\t\treturn;\n\t\t}\n\n\t\tvisit.state = VisitState.FAILED;\n\n\t\t// Log to console\n\t\tconsole.error(error);\n\n\t\t// Remove current history entry, then load requested url in browser\n\t\tthis.options.skipPopStateHandling = () => {\n\t\t\twindow.location.assign(visit.to.url + visit.to.hash);\n\t\t\treturn true;\n\t\t};\n\n\t\t// Go back to the actual page we're still at\n\t\twindow.history.back();\n\t}\n}\n", "import type Swup from '../Swup.js';\nimport type { Visit } from './Visit.js';\n\n/**\n * Perform the out/leave animation of the current page.\n * @returns Promise\n */\nexport const animatePageOut = async function (this: Swup, visit: Visit) {\n\tawait this.hooks.call('animation:out:start', visit, undefined, () => {\n\t\tthis.classes.add('is-changing', 'is-animating', 'is-leaving');\n\t});\n\n\tawait this.hooks.call('animation:out:await', visit, { skip: false }, (visit, { skip }) => {\n\t\tif (skip) return;\n\t\treturn this.awaitAnimations({ selector: visit.animation.selector });\n\t});\n\n\tawait this.hooks.call('animation:out:end', visit, undefined);\n};\n", "import type Swup from '../Swup.js';\nimport type { Options } from '../Swup.js';\nimport { query, queryAll } from '../utils.js';\nimport type { PageData } from './fetchPage.js';\n\n/**\n * Perform the replacement of content after loading a page.\n *\n * It takes an object with the page data as returned from `fetchPage` and a list\n * of container selectors to replace.\n *\n * @returns Whether all containers were replaced.\n */\nexport const replaceContent = function (\n\tthis: Swup,\n\t{ html }: PageData,\n\t{ containers }: { containers: Options['containers'] } = this.options\n): boolean {\n\tconst incomingDocument = new DOMParser().parseFromString(html, 'text/html');\n\n\t// Update browser title\n\tconst title = incomingDocument.querySelector('title')?.innerText || '';\n\tdocument.title = title;\n\n\t// Save persisted elements\n\tconst persistedElements = queryAll('[data-swup-persist]:not([data-swup-persist=\"\"])');\n\n\t// Update content containers\n\tconst replaced = containers\n\t\t.map((selector) => {\n\t\t\tconst currentEl = document.querySelector(selector);\n\t\t\tconst incomingEl = incomingDocument.querySelector(selector);\n\t\t\tif (currentEl && incomingEl) {\n\t\t\t\tcurrentEl.replaceWith(incomingEl);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (!currentEl) {\n\t\t\t\tconsole.warn(`[swup] Container missing in current document: ${selector}`);\n\t\t\t}\n\t\t\tif (!incomingEl) {\n\t\t\t\tconsole.warn(`[swup] Container missing in incoming document: ${selector}`);\n\t\t\t}\n\t\t\treturn false;\n\t\t})\n\t\t.filter(Boolean);\n\n\t// Restore persisted elements\n\tpersistedElements.forEach((existing) => {\n\t\tconst key = existing.getAttribute('data-swup-persist');\n\t\tconst replacement = query(`[data-swup-persist=\"${key}\"]`);\n\t\tif (replacement && replacement !== existing) {\n\t\t\treplacement.replaceWith(existing);\n\t\t}\n\t});\n\n\t// Return true if all containers were replaced\n\treturn replaced.length === containers.length;\n};\n", "import type Swup from '../Swup.js';\nimport type { Visit } from './Visit.js';\n\n/**\n * Update the scroll position after page render.\n * @returns Promise\n */\nexport const scrollToContent = function (this: Swup, visit: Visit): boolean {\n\tconst options: ScrollIntoViewOptions = { behavior: 'auto' };\n\tconst { target, reset } = visit.scroll;\n\tconst scrollTarget = target ?? visit.to.hash;\n\n\tlet scrolled = false;\n\n\tif (scrollTarget) {\n\t\tscrolled = this.hooks.callSync(\n\t\t\t'scroll:anchor',\n\t\t\tvisit,\n\t\t\t{ hash: scrollTarget, options },\n\t\t\t(visit, { hash, options }) => {\n\t\t\t\tconst anchor = this.getAnchorElement(hash);\n\t\t\t\tif (anchor) {\n\t\t\t\t\tanchor.scrollIntoView(options);\n\t\t\t\t}\n\t\t\t\treturn !!anchor;\n\t\t\t}\n\t\t);\n\t}\n\n\tif (reset && !scrolled) {\n\t\tscrolled = this.hooks.callSync('scroll:top', visit, { options }, (visit, { options }) => {\n\t\t\twindow.scrollTo({ top: 0, left: 0, ...options });\n\t\t\treturn true;\n\t\t});\n\t}\n\n\treturn scrolled;\n};\n", "import type Swup from '../Swup.js';\nimport { nextTick } from '../utils.js';\nimport type { Visit } from './Visit.js';\n\n/**\n * Perform the in/enter animation of the next page.\n * @returns Promise\n */\nexport const animatePageIn = async function (this: Swup, visit: Visit) {\n\t// Check if failed/aborted in the meantime\n\tif (visit.done) return;\n\n\tconst animation = this.hooks.call(\n\t\t'animation:in:await',\n\t\tvisit,\n\t\t{ skip: false },\n\t\t(visit, { skip }) => {\n\t\t\tif (skip) return;\n\t\t\treturn this.awaitAnimations({ selector: visit.animation.selector });\n\t\t}\n\t);\n\n\tawait nextTick();\n\n\tawait this.hooks.call('animation:in:start', visit, undefined, () => {\n\t\tthis.classes.remove('is-animating');\n\t});\n\n\tawait animation;\n\n\tawait this.hooks.call('animation:in:end', visit, undefined);\n};\n", "import { updateHistoryRecord, getCurrentUrl, classify } from '../helpers.js';\nimport type Swup from '../Swup.js';\nimport type { PageData } from './fetchPage.js';\nimport { VisitState, type Visit } from './Visit.js';\n\n/**\n * Render the next page: replace the content and update scroll position.\n */\nexport const renderPage = async function (this: Swup, visit: Visit, page: PageData): Promise {\n\t// Check if failed/aborted in the meantime\n\tif (visit.done) return;\n\n\tvisit.advance(VisitState.ENTERING);\n\n\tconst { url } = page;\n\n\t// update state if the url was redirected\n\tif (!this.isSameResolvedUrl(getCurrentUrl(), url)) {\n\t\tupdateHistoryRecord(url);\n\t\tthis.currentPageUrl = getCurrentUrl();\n\t\tvisit.to.url = this.currentPageUrl;\n\t}\n\n\t// replace content: allow handlers and plugins to overwrite paga data and containers\n\tawait this.hooks.call('content:replace', visit, { page }, (visit, { page }) => {\n\t\tthis.classes.remove('is-leaving');\n\t\t// only add for animated page loads\n\t\tif (visit.animation.animate) {\n\t\t\tthis.classes.add('is-rendering');\n\t\t}\n\t\tconst success = this.replaceContent(page, { containers: visit.containers });\n\t\tif (!success) {\n\t\t\tthrow new Error('[swup] Container mismatch, aborting');\n\t\t}\n\t\tif (visit.animation.animate) {\n\t\t\t// Make sure to add these classes to new containers as well\n\t\t\tthis.classes.add('is-changing', 'is-animating', 'is-rendering');\n\t\t\tif (visit.animation.name) {\n\t\t\t\tthis.classes.add(`to-${classify(visit.animation.name)}`);\n\t\t\t}\n\t\t}\n\t});\n\n\t// scroll into view: either anchor or top of page\n\tawait this.hooks.call('content:scroll', visit, undefined, () => {\n\t\treturn this.scrollToContent(visit);\n\t});\n\n\tawait this.hooks.call('page:view', visit, { url: this.currentPageUrl, title: document.title });\n};\n", "import type Swup from '../Swup.js';\n\nexport type Plugin = {\n\t/** Identify as a swup plugin */\n\tisSwupPlugin: true;\n\t/** Name of this plugin */\n\tname: string;\n\t/** Version of this plugin. Currently not in use, defined here for backward compatiblity. */\n\tversion?: string;\n\t/** The swup instance that mounted this plugin */\n\tswup?: Swup;\n\t/** Version requirements of this plugin. Example: `{ swup: '>=4' }` */\n\trequires?: Record;\n\t/** Run on mount */\n\tmount: () => void;\n\t/** Run on unmount */\n\tunmount: () => void;\n\t_beforeMount?: () => void;\n\t_afterUnmount?: () => void;\n\t_checkRequirements?: () => boolean;\n};\n\nconst isSwupPlugin = (maybeInvalidPlugin: unknown): maybeInvalidPlugin is Plugin => {\n\t// @ts-ignore: this might be anything, object or no\n\treturn Boolean(maybeInvalidPlugin?.isSwupPlugin);\n};\n\n/** Install a plugin. */\nexport const use = function (this: Swup, plugin: unknown) {\n\tif (!isSwupPlugin(plugin)) {\n\t\tconsole.error('Not a swup plugin instance', plugin);\n\t\treturn;\n\t}\n\n\tplugin.swup = this;\n\tif (plugin._checkRequirements) {\n\t\tif (!plugin._checkRequirements()) {\n\t\t\treturn;\n\t\t}\n\t}\n\tif (plugin._beforeMount) {\n\t\tplugin._beforeMount();\n\t}\n\tplugin.mount();\n\n\tthis.plugins.push(plugin);\n\n\treturn this.plugins;\n};\n\n/** Uninstall a plugin. */\nexport function unuse(this: Swup, pluginOrName: Plugin | string) {\n\tconst plugin = this.findPlugin(pluginOrName);\n\tif (!plugin) {\n\t\tconsole.error('No such plugin', plugin);\n\t\treturn;\n\t}\n\n\tplugin.unmount();\n\tif (plugin._afterUnmount) {\n\t\tplugin._afterUnmount();\n\t}\n\n\tthis.plugins = this.plugins.filter((p) => p !== plugin);\n\n\treturn this.plugins;\n}\n\n/** Find a plugin by name or reference. */\nexport function findPlugin(this: Swup, pluginOrName: Plugin | string) {\n\treturn this.plugins.find(\n\t\t(plugin) =>\n\t\t\tplugin === pluginOrName ||\n\t\t\tplugin.name === pluginOrName ||\n\t\t\tplugin.name === `Swup${String(pluginOrName)}`\n\t);\n}\n", "import type Swup from '../Swup.js';\n\n/**\n * Utility function to validate and run the global option 'resolveUrl'\n * @param {string} url\n * @returns {string} the resolved url\n */\nexport function resolveUrl(this: Swup, url: string): string {\n\tif (typeof this.options.resolveUrl !== 'function') {\n\t\tconsole.warn(`[swup] options.resolveUrl expects a callback function.`);\n\t\treturn url;\n\t}\n\tconst result = this.options.resolveUrl(url);\n\tif (!result || typeof result !== 'string') {\n\t\tconsole.warn(`[swup] options.resolveUrl needs to return a url`);\n\t\treturn url;\n\t}\n\tif (result.startsWith('//') || result.startsWith('http')) {\n\t\tconsole.warn(`[swup] options.resolveUrl needs to return a relative url`);\n\t\treturn url;\n\t}\n\treturn result;\n}\n\n/**\n * Compares the resolved version of two paths and returns true if they are the same\n * @param {string} url1\n * @param {string} url2\n * @returns {boolean}\n */\nexport function isSameResolvedUrl(this: Swup, url1: string, url2: string): boolean {\n\treturn this.resolveUrl(url1) === this.resolveUrl(url2);\n}\n", "import { type DelegateEvent } from 'delegate-it';\n\nimport version from './config/version.js';\n\nimport { delegateEvent, getCurrentUrl, Location, updateHistoryRecord } from './helpers.js';\nimport { type DelegateEventUnsubscribe } from './helpers/delegateEvent.js';\n\nimport { Cache } from './modules/Cache.js';\nimport { Classes } from './modules/Classes.js';\nimport { type Visit, createVisit } from './modules/Visit.js';\nimport { Hooks } from './modules/Hooks.js';\nimport { getAnchorElement } from './modules/getAnchorElement.js';\nimport { awaitAnimations } from './modules/awaitAnimations.js';\nimport { navigate, performNavigation, type NavigationToSelfAction } from './modules/navigate.js';\nimport { fetchPage } from './modules/fetchPage.js';\nimport { animatePageOut } from './modules/animatePageOut.js';\nimport { replaceContent } from './modules/replaceContent.js';\nimport { scrollToContent } from './modules/scrollToContent.js';\nimport { animatePageIn } from './modules/animatePageIn.js';\nimport { renderPage } from './modules/renderPage.js';\nimport { use, unuse, findPlugin, type Plugin } from './modules/plugins.js';\nimport { isSameResolvedUrl, resolveUrl } from './modules/resolveUrl.js';\nimport { nextTick } from './utils.js';\nimport { type HistoryState } from './helpers/history.js';\n\n/** Options for customizing swup's behavior. */\nexport type Options = {\n\t/** Whether history visits are animated. Default: `false` */\n\tanimateHistoryBrowsing: boolean;\n\t/** Selector for detecting animation timing. Default: `[class*=\"transition-\"]` */\n\tanimationSelector: string | false;\n\t/** Elements on which to add animation classes. Default: `html` element */\n\tanimationScope: 'html' | 'containers';\n\t/** Enable in-memory page cache. Default: `true` */\n\tcache: boolean;\n\t/** Content containers to be replaced on page visits. Default: `['#swup']` */\n\tcontainers: string[];\n\t/** Callback for ignoring visits. Receives the element and event that triggered the visit. */\n\tignoreVisit: (url: string, { el, event }: { el?: Element; event?: Event }) => boolean;\n\t/** Selector for links that trigger visits. Default: `'a[href]'` */\n\tlinkSelector: string;\n\t/** How swup handles links to the same page. Default: `scroll` */\n\tlinkToSelf: NavigationToSelfAction;\n\t/** Enable native animations using the View Transitions API. */\n\tnative: boolean;\n\t/** Plugins to register on startup. */\n\tplugins: Plugin[];\n\t/** Custom headers sent along with fetch requests. */\n\trequestHeaders: Record;\n\t/** Rewrite URLs before loading them. */\n\tresolveUrl: (url: string) => string;\n\t/** Callback for telling swup to ignore certain popstate events. */\n\tskipPopStateHandling: (event: PopStateEvent) => boolean;\n\t/** Request timeout in milliseconds. */\n\ttimeout: number;\n};\n\nconst defaults: Options = {\n\tanimateHistoryBrowsing: false,\n\tanimationSelector: '[class*=\"transition-\"]',\n\tanimationScope: 'html',\n\tcache: true,\n\tcontainers: ['#swup'],\n\tignoreVisit: (url, { el } = {}) => !!el?.closest('[data-no-swup]'),\n\tlinkSelector: 'a[href]',\n\tlinkToSelf: 'scroll',\n\tnative: false,\n\tplugins: [],\n\tresolveUrl: (url) => url,\n\trequestHeaders: {\n\t\t'X-Requested-With': 'swup',\n\t\t'Accept': 'text/html, application/xhtml+xml'\n\t},\n\tskipPopStateHandling: (event) => (event.state as HistoryState)?.source !== 'swup',\n\ttimeout: 0\n};\n\n/** Swup page transition library. */\nexport default class Swup {\n\t/** Library version */\n\treadonly version: string = version;\n\t/** Options passed into the instance */\n\toptions: Options;\n\t/** Default options before merging user options */\n\treadonly defaults: Options = defaults;\n\t/** Registered plugin instances */\n\tplugins: Plugin[] = [];\n\t/** Data about the current visit */\n\tvisit: Visit;\n\t/** Cache instance */\n\treadonly cache: Cache;\n\t/** Hook registry */\n\treadonly hooks: Hooks;\n\t/** Animation class manager */\n\treadonly classes: Classes;\n\t/** URL of the currently visible page */\n\tcurrentPageUrl: string = getCurrentUrl();\n\t/** Index of the current history entry */\n\tprotected currentHistoryIndex: number;\n\t/** Delegated event subscription handle */\n\tprotected clickDelegate?: DelegateEventUnsubscribe;\n\t/** Navigation status */\n\tprotected navigating: boolean = false;\n\t/** Run anytime a visit ends */\n\tprotected onVisitEnd?: () => Promise;\n\n\t/** Install a plugin */\n\tuse = use;\n\t/** Uninstall a plugin */\n\tunuse = unuse;\n\t/** Find a plugin by name or instance */\n\tfindPlugin = findPlugin;\n\n\t/** Log a message. Has no effect unless debug plugin is installed */\n\tlog: (message: string, context?: unknown) => void = () => {};\n\n\t/** Navigate to a new URL */\n\tnavigate = navigate;\n\t/** Actually perform a navigation */\n\tprotected performNavigation = performNavigation;\n\t/** Create a new context for this visit */\n\tprotected createVisit = createVisit;\n\t/** Register a delegated event listener */\n\tdelegateEvent = delegateEvent;\n\t/** Fetch a page from the server */\n\tfetchPage = fetchPage;\n\t/** Resolve when animations on the page finish */\n\tawaitAnimations = awaitAnimations;\n\tprotected renderPage = renderPage;\n\t/** Replace the content after page load */\n\treplaceContent = replaceContent;\n\tprotected animatePageIn = animatePageIn;\n\tprotected animatePageOut = animatePageOut;\n\tprotected scrollToContent = scrollToContent;\n\t/** Find the anchor element for a given hash */\n\tgetAnchorElement = getAnchorElement;\n\n\t/** Get the current page URL */\n\tgetCurrentUrl = getCurrentUrl;\n\t/** Resolve a URL to its final location */\n\tresolveUrl = resolveUrl;\n\t/** Check if two URLs resolve to the same location */\n\tprotected isSameResolvedUrl = isSameResolvedUrl;\n\n\tconstructor(options: Partial = {}) {\n\t\t// Merge defaults and options\n\t\tthis.options = { ...this.defaults, ...options };\n\n\t\tthis.handleLinkClick = this.handleLinkClick.bind(this);\n\t\tthis.handlePopState = this.handlePopState.bind(this);\n\n\t\tthis.cache = new Cache(this);\n\t\tthis.classes = new Classes(this);\n\t\tthis.hooks = new Hooks(this);\n\t\tthis.visit = this.createVisit({ to: '' });\n\n\t\tthis.currentHistoryIndex = (window.history.state as HistoryState)?.index ?? 1;\n\n\t\tif (!this.checkRequirements()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.enable();\n\t}\n\n\tprotected checkRequirements() {\n\t\tif (typeof Promise === 'undefined') {\n\t\t\tconsole.warn('Promise is not supported');\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\t/** Enable this instance, adding listeners and classnames. */\n\tasync enable() {\n\t\t// Add event listener\n\t\tconst { linkSelector } = this.options;\n\t\tthis.clickDelegate = this.delegateEvent(linkSelector, 'click', this.handleLinkClick);\n\n\t\twindow.addEventListener('popstate', this.handlePopState);\n\n\t\t// Set scroll restoration to manual if animating history visits\n\t\tif (this.options.animateHistoryBrowsing) {\n\t\t\twindow.history.scrollRestoration = 'manual';\n\t\t}\n\n\t\t// Initial save to cache\n\t\tif (this.options.cache) {\n\t\t\t// Disabled to avoid caching modified dom state: logic moved to preload plugin\n\t\t\t// https://github.com/swup/swup/issues/475\n\t\t}\n\n\t\t// Sanitize/check native option\n\t\tthis.options.native = this.options.native && !!document.startViewTransition;\n\n\t\t// Mount plugins\n\t\tthis.options.plugins.forEach((plugin) => this.use(plugin));\n\n\t\t// Create initial history record\n\t\tif ((window.history.state as HistoryState)?.source !== 'swup') {\n\t\t\tupdateHistoryRecord(null, { index: this.currentHistoryIndex });\n\t\t}\n\n\t\t// Give consumers a chance to hook into enable\n\t\tawait nextTick();\n\n\t\t// Trigger enable hook\n\t\tawait this.hooks.call('enable', undefined, undefined, () => {\n\t\t\tconst html = document.documentElement;\n\t\t\thtml.classList.add('swup-enabled');\n\t\t\thtml.classList.toggle('swup-native', this.options.native);\n\t\t});\n\t}\n\n\t/** Disable this instance, removing listeners and classnames. */\n\tasync destroy() {\n\t\t// remove delegated listener\n\t\tthis.clickDelegate!.destroy();\n\n\t\t// remove popstate listener\n\t\twindow.removeEventListener('popstate', this.handlePopState);\n\n\t\t// empty cache\n\t\tthis.cache.clear();\n\n\t\t// unmount plugins\n\t\tthis.options.plugins.forEach((plugin) => this.unuse(plugin));\n\n\t\t// trigger disable hook\n\t\tawait this.hooks.call('disable', undefined, undefined, () => {\n\t\t\tconst html = document.documentElement;\n\t\t\thtml.classList.remove('swup-enabled');\n\t\t\thtml.classList.remove('swup-native');\n\t\t});\n\n\t\t// remove handlers\n\t\tthis.hooks.clear();\n\t}\n\n\t/** Determine if a visit should be ignored by swup, based on URL or trigger element. */\n\tshouldIgnoreVisit(href: string, { el, event }: { el?: Element; event?: Event } = {}) {\n\t\tconst { origin, url, hash } = Location.fromUrl(href);\n\n\t\t// Ignore if the new origin doesn't match the current one\n\t\tif (origin !== window.location.origin) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Ignore if the link/form would open a new window (or none at all)\n\t\tif (el && this.triggerWillOpenNewWindow(el)) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Ignore if the visit should be ignored as per user options\n\t\tif (this.options.ignoreVisit(url + hash, { el, event })) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Finally, allow the visit\n\t\treturn false;\n\t}\n\n\tprotected handleLinkClick(event: DelegateEvent) {\n\t\tconst el = event.delegateTarget as HTMLAnchorElement;\n\t\tconst { href, url, hash } = Location.fromElement(el);\n\n\t\t// Exit early if the link should be ignored\n\t\tif (this.shouldIgnoreVisit(href, { el, event })) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Ignore if swup is currently navigating towards the link's URL\n\t\tif (this.navigating && url === this.visit.to.url) {\n\t\t\tevent.preventDefault();\n\t\t\treturn;\n\t\t}\n\n\t\tconst visit = this.createVisit({ to: url, hash, el, event });\n\n\t\t// Exit early if control key pressed\n\t\tif (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) {\n\t\t\tthis.hooks.callSync('link:newtab', visit, { href });\n\t\t\treturn;\n\t\t}\n\n\t\t// Exit early if other than left mouse button\n\t\tif (event.button !== 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.hooks.callSync('link:click', visit, { el, event }, () => {\n\t\t\tconst from = visit.from.url ?? '';\n\n\t\t\tevent.preventDefault();\n\n\t\t\t// Handle links to the same page\n\t\t\tif (!url || url === from) {\n\t\t\t\tif (hash) {\n\t\t\t\t\t// With hash: scroll to anchor\n\t\t\t\t\tthis.hooks.callSync('link:anchor', visit, { hash }, () => {\n\t\t\t\t\t\tupdateHistoryRecord(url + hash);\n\t\t\t\t\t\tthis.scrollToContent(visit);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\t// Without hash: scroll to top or load/reload page\n\t\t\t\t\tthis.hooks.callSync('link:self', visit, undefined, () => {\n\t\t\t\t\t\tif (this.options.linkToSelf === 'navigate') {\n\t\t\t\t\t\t\tthis.performNavigation(visit);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tupdateHistoryRecord(url);\n\t\t\t\t\t\t\tthis.scrollToContent(visit);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Exit early if the resolved path hasn't changed\n\t\t\tif (this.isSameResolvedUrl(url, from)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Finally, proceed with loading the page\n\t\t\tthis.performNavigation(visit);\n\t\t});\n\t}\n\n\tprotected handlePopState(event: PopStateEvent) {\n\t\tconst href: string = (event.state as HistoryState)?.url ?? window.location.href;\n\n\t\t// Exit early if this event should be ignored\n\t\tif (this.options.skipPopStateHandling(event)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Exit early if the resolved path hasn't changed\n\t\tif (this.isSameResolvedUrl(getCurrentUrl(), this.currentPageUrl)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { url, hash } = Location.fromUrl(href);\n\n\t\tconst visit = this.createVisit({ to: url, hash, event });\n\n\t\t// Mark as history visit\n\t\tvisit.history.popstate = true;\n\n\t\t// Determine direction of history visit\n\t\tconst index = (event.state as HistoryState)?.index ?? 0;\n\t\tif (index && index !== this.currentHistoryIndex) {\n\t\t\tconst direction = index - this.currentHistoryIndex > 0 ? 'forwards' : 'backwards';\n\t\t\tvisit.history.direction = direction;\n\t\t\tthis.currentHistoryIndex = index;\n\t\t}\n\n\t\t// Disable animation & scrolling for history visits\n\t\tvisit.animation.animate = false;\n\t\tvisit.scroll.reset = false;\n\t\tvisit.scroll.target = false;\n\n\t\t// Animated history visit: re-enable animation & scroll reset\n\t\tif (this.options.animateHistoryBrowsing) {\n\t\t\tvisit.animation.animate = true;\n\t\t\tvisit.scroll.reset = true;\n\t\t}\n\n\t\tthis.hooks.callSync('history:popstate', visit, { event }, () => {\n\t\t\tthis.performNavigation(visit);\n\t\t});\n\t}\n\n\t/** Determine whether an element will open a new tab when clicking/activating. */\n\tprotected triggerWillOpenNewWindow(triggerEl: Element) {\n\t\tif (triggerEl.matches('[download], [target=\"_blank\"]')) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n}\n", "type Comparator = '>' | '>=' | '<' | '<=';\n\n// Fill versions to exactly 3 decimals\nexport const normalizeVersion = (version: string): string => {\n\treturn String(version)\n\t\t.split('.')\n\t\t.map(segment => String(parseInt(segment || '0', 10)))\n\t\t.concat(['0', '0'])\n\t\t.slice(0, 3)\n\t\t.join('.');\n};\n\n// Numerically compare version strings after normalizing them\nexport const compareVersion = (a: string, b: string): number => {\n\ta = normalizeVersion(a);\n\tb = normalizeVersion(b);\n\treturn a.localeCompare(b, undefined, { numeric: true });\n};\n\n// Apply a comparator (equals, greater-than, etc) by its symbol to a sort comparison\nconst applyComparator = (comparisonResult: number, comparator: Comparator) => {\n\tconst comparators = {\n\t\t'': (r: number) => r === 0,\n\t\t'>': (r: number) => r > 0,\n\t\t'>=': (r: number) => r >= 0,\n\t\t'<': (r: number) => r < 0,\n\t\t'<=': (r: number) => r <= 0\n\t};\n\tconst comparatorFn = comparators[comparator] || comparators[''];\n\treturn comparatorFn(comparisonResult);\n};\n\n/**\n * Check if a version satisfies all given version requirements\n *\n * versionSatisfies('2.1.0', ['>=2', '<4']) // true\n * versionSatisfies('2.1.0', ['5']) // false\n *\n * @param {string} installed Installed version\n * @param {Array.} requirements Array of requirements that must be satisfied\n * @returns boolean\n */\nexport const versionSatisfies = (installed: string, requirements: string[]) => {\n\treturn requirements.every((required) => {\n\t\tconst [, comparator, version] = required.match(/^([\\D]+)?(.*)$/) || [];\n\t\tconst comparisonResult = compareVersion(installed, version);\n\t\treturn applyComparator(comparisonResult, (comparator as Comparator) || '>=');\n\t});\n};\n", "import type Swup from 'swup';\nimport type { Plugin, HookName, HookOptions, HookUnregister, Handler } from 'swup';\nimport { checkDependencyVersion } from './pluginRequirements.js';\n\nfunction isBound(func: Function) {\n\treturn func.name.startsWith('bound ') && !func.hasOwnProperty('prototype');\n}\n\nexport default abstract class SwupPlugin implements Plugin {\n\t/** Name of the plugin */\n\tabstract name: string;\n\n\t/** Identify as a swup plugin */\n\tisSwupPlugin: true = true;\n\n\t// Swup instance, assigned by swup itself\n\tswup!: Swup;\n\n\t/** Version of this plugin. Currently not in use, defined here for backward compatiblity. */\n\tversion?: string;\n\n\t/** Version requirements of this plugin. Example: `{ swup: '>=4' }` */\n\trequires?: Record = {};\n\n\t// List of hook handlers to unregister on unmount\n\tprivate handlersToUnregister: HookUnregister[] = [];\n\n\t/** Run on mount */\n\tmount() {\n\t\t// this is mount method rewritten by class extending\n\t\t// and is executed when swup is enabled with plugin\n\t}\n\n\t/** Run on unmount */\n\tunmount() {\n\t\t// this is unmount method rewritten by class extending\n\t\t// and is executed when swup with plugin is disabled\n\n\t\t// Unsubscribe all registered hook handlers\n\t\tthis.handlersToUnregister.forEach((unregister) => unregister());\n\t\tthis.handlersToUnregister = [];\n\t}\n\n\t_beforeMount(): void {\n\t\tif (!this.name) {\n\t\t\tthrow new Error('You must define a name of plugin when creating a class.');\n\t\t}\n\t}\n\n\t_afterUnmount(): void {\n\t\t// here for any future hidden auto-cleanup\n\t}\n\n\t_checkRequirements(): boolean {\n\t\tif (typeof this.requires !== 'object') {\n\t\t\treturn true;\n\t\t}\n\n\t\tObject.entries(this.requires).forEach(([dependency, versions]) => {\n\t\t\tversions = Array.isArray(versions) ? versions : [versions];\n\t\t\tif (!checkDependencyVersion(dependency, versions, this.swup)) {\n\t\t\t\tconst requirement = `${dependency} ${versions.join(', ')}`;\n\t\t\t\tthrow new Error(`Plugin version mismatch: ${this.name} requires ${requirement}`);\n\t\t\t}\n\t\t});\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Register a new hook handler.\n\t *\n\t * On plugin unmount, the handler will automatically be unregistered.\n\t * The handler function is lexically bound to the plugin instance for convenience.\n\t * @see swup.hooks.on\n\t */\n\tprotected on(hook: T, handler: Handler, options: HookOptions = {}): HookUnregister {\n\t\thandler = !isBound(handler) ? handler.bind(this) : handler;\n\t\tconst unregister = this.swup.hooks.on(hook, handler, options);\n\t\tthis.handlersToUnregister.push(unregister);\n\t\treturn unregister;\n\t}\n\n\tprotected once(hook: T, handler: Handler, options: HookOptions = {}): HookUnregister {\n\t\treturn this.on(hook, handler, { ...options, once: true });\n\t}\n\n\tprotected before(hook: T, handler: Handler, options: HookOptions = {}): HookUnregister {\n\t\treturn this.on(hook, handler, { ...options, before: true });\n\t}\n\n\tprotected replace(hook: T, handler: Handler, options: HookOptions = {}): HookUnregister {\n\t\treturn this.on(hook, handler, { ...options, replace: true });\n\t}\n\n\tprotected off(hook: T, handler?: Handler): void {\n\t\treturn this.swup.hooks.off(hook, handler!);\n\t}\n}\n", "import type Swup from 'swup';\n\nimport { versionSatisfies } from './versionSatisfies.js';\n\nfunction getInstalledDependencyVersion(dependency: string, swup: Swup): string {\n\tif (dependency === 'swup') {\n\t\treturn swup.version ?? '';\n\t} else {\n\t\t// Circular type dependency?\n\t\t// findPlugin returns swup's Plugin type which is not up-to-date\n\t\t// with the actual Plugin type from index.ts\n\t\tconst plugin = swup.findPlugin(dependency);\n\t\treturn plugin?.version ?? '';\n\t}\n}\n\nexport function checkDependencyVersion(\n\tdependency: string,\n\trequirements: string[],\n\tswup: Swup\n): boolean {\n\tconst version = getInstalledDependencyVersion(dependency, swup);\n\tif (version) {\n\t\treturn versionSatisfies(version, requirements);\n\t} else {\n\t\treturn false;\n\t}\n}\n", "declare global {\n\tconst __DEV__: boolean;\n\tconst MICROBUNDLE_TARGET: string;\n\tinterface Window {\n\t\tprocess?: any;\n\t}\n}\n\n/**\n * Make sure process.env is defined in the browser\n */\nif (!window.process) window.process = {};\nif (!window.process.env) window.process.env = {};\n\n/**\n * Export the __DEV__ variable. This will become false in production builds from consumers\n */\nexport const __TEST__ = ['test'].includes(String(process.env.NODE_ENV));\nexport const __DEV__ = ['development', 'test'].includes(String(process.env.NODE_ENV));\n", "import { __TEST__ } from './env.js';\n/**\n * Wrap a string in an escape sequence\n * @see https://stackoverflow.com/a/68373080/586823\n */\nconst wrapInEscapeSequence = (s: string, open: number, close: number): string => {\n\tif (s == null) return s;\n\treturn `\\x1b[${open}m${String(s)}\\x1b[${close}m`;\n};\n\n/**\n * Color Codes:\n * @see https://github.com/lzwme/console-log-colors/blob/56a41b352bf9ed327cc864f588b831d92ee6390e/src/index.js\n */\nconst bold = (s: string): string => wrapInEscapeSequence(s, 1, 22);\nconst purple = (s: string): string => wrapInEscapeSequence(s, 94, 39);\n\nconst prepare = (s: string): string => {\n\tif (__TEST__) return s;\n\treturn `🧩 ${bold(s)}`;\n};\n\nexport const highlight = (s: string): string => {\n\tif (__TEST__) return s;\n\treturn purple(s);\n};\n\n/**\n * A slim wrapper around console statements\n */\nexport default class Logger {\n\tlog(...args: any) {\n\t\tconst msg = args.shift();\n\t\tconsole.log(prepare(msg), ...args);\n\t}\n\twarn(...args: any) {\n\t\tconst msg = args.shift();\n\t\tconsole.warn(prepare(msg), ...args);\n\t}\n\terror(...args: any) {\n\t\tconst msg = args.shift();\n\t\tconsole.error(prepare(msg), ...args);\n\t}\n\tlogIf(condition: boolean, ...args: any) {\n\t\tif (condition) this.log(...args);\n\t}\n\twarnIf(condition: boolean, ...args: any) {\n\t\tif (condition) this.warn(...args);\n\t}\n\terrorIf(condition: boolean, ...args: any) {\n\t\tif (condition) this.error(...args);\n\t}\n}\n", "import { Location } from 'swup';\nimport type { Swup, Visit, VisitScroll } from 'swup';\nimport type { default as FragmentPlugin } from '../SwupFragmentPlugin.js';\nimport type { Route, Rule, FragmentVisit, FragmentElement } from './defs.js';\nimport type ParsedRule from './ParsedRule.js';\nimport Logger, { highlight } from './Logger.js';\n\nimport { __DEV__ } from './env.js';\n\n/**\n * Handles a page view. Runs on `mount` as well as on every content:replace\n */\nexport const handlePageView = (fragmentPlugin: FragmentPlugin): void => {\n\tprepareFragmentElements(fragmentPlugin);\n\thandleLinksToFragments(fragmentPlugin);\n\tshowDialogs(fragmentPlugin);\n};\n\n/**\n * Run `showModal` for all `` elements\n * This puts them on the top layer and makes them ignore css `transform`s on parent elements\n * @see https://developer.mozilla.org/en-US/docs/Glossary/Top_layer\n */\nfunction showDialogs({ logger }: FragmentPlugin): void {\n\tdocument\n\t\t.querySelectorAll('dialog[data-swup-fragment]')\n\t\t.forEach((el) => {\n\t\t\tif (!el.__swupFragment) {\n\t\t\t\tif (__DEV__) logger?.warn(`fragment properties missing on element:`, el);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (el.__swupFragment.modalShown) return;\n\t\t\tel.__swupFragment.modalShown = true;\n\t\t\tel.removeAttribute('open');\n\t\t\tel.showModal?.();\n\t\t\tel.addEventListener('keydown', (e) => e.key === 'Escape' && e.preventDefault());\n\t\t});\n}\n\n/**\n * Updates the `href` of links matching [data-swup-link-to-fragment=\"#my-fragment\"]\n */\nfunction handleLinksToFragments({ logger, swup }: FragmentPlugin): void {\n\tconst targetAttribute = 'data-swup-link-to-fragment';\n\tconst links = document.querySelectorAll(`a[${targetAttribute}]`);\n\n\tlinks.forEach((el) => {\n\t\tconst selector = el.getAttribute(targetAttribute);\n\t\tif (!selector) {\n\t\t\t// prettier-ignore\n\t\t\tif (__DEV__) logger?.warn(`[${targetAttribute}] needs to contain a valid fragment selector`);\n\t\t\treturn;\n\t\t}\n\n\t\tconst fragment = queryFragmentElement(selector, swup);\n\t\tif (!fragment) {\n\t\t\tif (__DEV__) {\n\t\t\t\tlogger?.log(\n\t\t\t\t\t// prettier-ignore\n\t\t\t\t\t`ignoring ${highlight(`[${targetAttribute}=\"${selector}\"]`)} as ${highlight(selector)} is missing`\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tconst fragmentUrl = fragment.__swupFragment?.url;\n\t\tif (!fragmentUrl) {\n\t\t\tif (__DEV__) logger?.warn(`no fragment infos found on ${selector}`);\n\t\t\treturn;\n\t\t}\n\n\t\t// Help finding suspicious fragment urls\n\t\tif (isEqualUrl(fragmentUrl, swup.getCurrentUrl())) {\n\t\t\t// prettier-ignore\n\t\t\tif (__DEV__) logger?.warn(`The fragment URL of ${selector} is identical to the current URL. This could mean that [data-swup-fragment-url] needs to be provided by the server.`);\n\t\t\treturn;\n\t\t}\n\n\t\tel.href = fragmentUrl;\n\t});\n}\n\n/**\n * Adds attributes and properties to fragment elements\n */\nfunction prepareFragmentElements({ parsedRules, swup, logger }: FragmentPlugin): void {\n\tconst currentUrl = swup.getCurrentUrl();\n\n\tparsedRules\n\t\t.filter((rule) => rule.matchesFrom(currentUrl) || rule.matchesTo(currentUrl))\n\t\t.forEach((rule) => {\n\t\t\trule.containers.forEach((selector) => {\n\t\t\t\tconst el = queryFragmentElement(`${selector}:not([data-swup-fragment])`, swup);\n\n\t\t\t\t// No element\n\t\t\t\tif (!el) return;\n\n\t\t\t\t// Parse a provided fragment URL\n\t\t\t\tconst providedFragmentUrl = el.getAttribute('data-swup-fragment-url');\n\t\t\t\tif (providedFragmentUrl) {\n\t\t\t\t\tif (__DEV__) {\n\t\t\t\t\t\t// prettier-ignore\n\t\t\t\t\t\tlogger?.log(`fragment url ${highlight(providedFragmentUrl)} for ${highlight(selector)} provided by server`);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Get the fragment URL\n\t\t\t\tconst { url } = Location.fromUrl(providedFragmentUrl || currentUrl);\n\n\t\t\t\t// Mark the element as a fragment\n\t\t\t\tel.setAttribute('data-swup-fragment', '');\n\n\t\t\t\t// Augment the element with the necessary properties\n\t\t\t\tel.__swupFragment = { url, selector };\n\t\t\t});\n\t\t});\n}\n\n/**\n * Get all containers that should be replaced for a given visit's route\n */\nexport const getFragmentVisitContainers = (\n\troute: Route,\n\tselectors: string[],\n\tswup: Swup,\n\tlogger?: Logger\n) => {\n\tconst isReload = isEqualUrl(route.from, route.to);\n\n\treturn selectors.filter((selector) => {\n\t\tconst el = document.querySelector(selector);\n\n\t\tif (!el) {\n\t\t\tif (__DEV__) logger?.log(`${highlight(selector)} missing in current document`);\n\t\t\treturn false;\n\t\t}\n\n\t\tif (!queryFragmentElement(selector, swup)) {\n\t\t\tif (__DEV__) {\n\t\t\t\t// prettier-ignore\n\t\t\t\tlogger?.error(`${highlight(selector)} is outside of swup's default containers`);\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tif (!isReload && elementMatchesFragmentUrl(el, route.to)) {\n\t\t\tif (__DEV__)\n\t\t\t\t// prettier-ignore\n\t\t\t\tlogger?.log(`ignoring fragment ${highlight(selector)} as it already matches the current URL`);\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t});\n};\n\n/**\n * Checks if an element's fragment url matches a given URL\n */\nexport const elementMatchesFragmentUrl = (el: FragmentElement, url: string): boolean => {\n\tconst fragmentUrl = el.__swupFragment?.url;\n\tif (!fragmentUrl) return false;\n\treturn isEqualUrl(fragmentUrl, url);\n};\n\n/**\n * Checks if two URLs should be considered equal:\n *\n * - ignores trailing slashes\n * - ignores query string order\n *\n * Example: /test?foo=bar&baz=boo === /test/?baz=boo&foo=bar\n */\nconst isEqualUrl = (url1: string, url2: string) => {\n\treturn normalizeUrl(url1) === normalizeUrl(url2);\n};\n\n/**\n * Normalize a URL\n *\n * - removes the trailing slash\n * - sorts query params\n */\nexport const normalizeUrl = (url: string) => {\n\tif (!url.trim()) return url;\n\n\tconst removeTrailingSlash = (str: string) => str.replace(/\\/+$/g, '');\n\n\tconst location = Location.fromUrl(url);\n\tlocation.searchParams.sort();\n\n\treturn removeTrailingSlash(location.pathname) + location.search;\n};\n\n/**\n * Removes all fragment traces from all fragment elements\n */\nexport const cleanupFragmentElements = () => {\n\tdocument.querySelectorAll('[data-swup-fragment]').forEach((el) => {\n\t\tel.removeAttribute('data-swup-fragment-url');\n\t\tdelete el.__swupFragment;\n\t});\n};\n\n/**\n * Get the route from a given visit\n */\nexport const getRoute = (visit: Visit): Route | undefined => {\n\tconst from = visit.from.url;\n\tconst to = visit.to.url;\n\tif (!from || !to) return;\n\treturn { from, to };\n};\n\n/**\n * Adds or removes a rule's name class from all current fragment elements\n */\nexport const toggleFragmentVisitClass = (\n\tfragmentVisit: FragmentVisit | undefined,\n\ttoggle: boolean\n): void => {\n\tif (!fragmentVisit?.name) return;\n\n\tconst { name, containers } = fragmentVisit;\n\n\tcontainers.forEach((selector) => {\n\t\tdocument.querySelector(selector)?.classList.toggle(`to-${name}`, toggle);\n\t});\n};\n\n/**\n * Get the first matching rule for a given route\n */\nexport const getFirstMatchingRule = (route: Route, rules: ParsedRule[]): ParsedRule | undefined => {\n\treturn rules.find((rule) => rule.matches(route));\n};\n\n/**\n * Makes sure unchanged fragment elements land in the cache of the current page\n */\nexport const cacheForeignFragmentElements = ({ swup, logger }: FragmentPlugin): void => {\n\tconst currentUrl = swup.getCurrentUrl();\n\tconst cache = swup.cache;\n\n\t// Get the cache entry for the current URL\n\tconst currentCache = cache.get(currentUrl);\n\tif (!currentCache) return;\n\tconst currentCachedDocument = new DOMParser().parseFromString(currentCache.html, 'text/html');\n\n\t// debug info\n\tconst updatedFragments: FragmentElement[] = [];\n\n\t/**\n\t * We only want to handle fragment elements that\n\t * - are not templates\n\t * - don't fit the current URL\n\t */\n\tconst foreignFragmentElements = Array.from(\n\t\tdocument.querySelectorAll('[data-swup-fragment]')\n\t).filter((el) => {\n\t\tif (el.matches('template')) return false;\n\t\tif (elementMatchesFragmentUrl(el, currentUrl)) return false;\n\t\treturn true;\n\t});\n\n\t// Bail early if there are no foreign fragment elements\n\tif (!foreignFragmentElements.length) return;\n\n\tif (!swup.options.cache) {\n\t\tif (__DEV__) logger?.warn(`can't cache foreign fragment elements without swup's cache`);\n\t\treturn;\n\t}\n\n\tforeignFragmentElements.forEach((el) => {\n\t\t// Don't cache the fragment if it contains fragment elements\n\t\tconst containsFragments = el.querySelector('[data-swup-fragment]') != null;\n\t\tif (containsFragments) return;\n\n\t\tconst fragmentUrl = el.__swupFragment?.url;\n\t\tif (!fragmentUrl) {\n\t\t\tif (__DEV__) logger?.warn(`no fragment url found:`, el);\n\t\t\treturn;\n\t\t}\n\n\t\tconst fragmentSelector = el.__swupFragment?.selector;\n\t\tif (!fragmentSelector) {\n\t\t\tif (__DEV__) logger?.warn(`no fragment selector found:`, el);\n\t\t\treturn;\n\t\t}\n\n\t\t// Get the cache entry for the fragment URL, bail early if it doesn't exist\n\t\tconst fragmentCache = cache.get(fragmentUrl);\n\t\tif (!fragmentCache) return;\n\n\t\t// Check if the fragment exists in the current cached document\n\t\tconst currentFragment = currentCachedDocument.querySelector(fragmentSelector);\n\t\tif (!currentFragment) return;\n\n\t\t// Get a fresh copy of the fragment from it's original cache\n\t\tconst unchangedFragment = new DOMParser()\n\t\t\t.parseFromString(fragmentCache.html, 'text/html')\n\t\t\t.querySelector(fragmentSelector);\n\t\tif (!unchangedFragment) return;\n\n\t\t// Make sure the dynamic fragment url makes it to the cache\n\t\tunchangedFragment.setAttribute('data-swup-fragment-url', fragmentUrl);\n\n\t\t// Replace the current fragment with the unchanged fragment\n\t\tcurrentFragment.replaceWith(unchangedFragment);\n\n\t\t// For debugging\n\t\tupdatedFragments.push(el);\n\t});\n\n\tif (!updatedFragments.length) return;\n\n\t// Update the cache of the current page with the updated html\n\tcache.update(currentUrl, {\n\t\t...currentCache,\n\t\tfragmentHtml: currentCachedDocument.documentElement.outerHTML\n\t});\n\n\tupdatedFragments.forEach((el) => {\n\t\tconst url = el.__swupFragment?.url || '';\n\t\tconst selector = el.__swupFragment?.selector || '';\n\t\t// prettier-ignore\n\t\tif (__DEV__) logger?.log(`updated cache with ${highlight(selector)} from ${highlight(url)}`);\n\t});\n};\n\n/**\n * Skips the animation if all current containers are